2013-03-25 6 views
0

Я столкнулся с выражением с вызовом функции, а также с индексом массива в виде кода, упомянутого ниже. В этом случае инструкция s = o.init() [- 1] возвращает значение a1 [0]. Я не понимаю, как это работает, что будет делать это утверждение o.init() [- 1]? Я знаю, что 0.init() даст вызов функции, но что делает [-1] указывать? ? Помогите решить этот вопрос?Вызов функции с индексом массива

#include<iostream> 
using namespace std; 

class a 
{ 
    char a1[1000]; 

    public: 
    a() 
{ 
    a1[0]='a'; 
} 
    char* init() 
    { 
    cout<<"value of a1 is"<<a1<<endl; 
    return a1+1; 
    } 
}; 

int main() 
{ 
    a o; 
    char s; 
    s=o.init()[-1]; 


cout<<"value of s is"<<s<<endl; 
} 

ответ

1

Возвращаемое значение метода является char*. Таким образом, оператор индекса вычитает один из адреса и разыгрывает его.

1

init возвращает символ *, поэтому init() [- 1] просто возьмет указатель на один символ назад в памяти.

себе это нравится:

char* arr = o.init(); 

, а затем:

arr--; 

Как вы можете видеть, ваша функция возвращает массив + 1, поэтому для того, чтобы взять 'а', или, вернее, начальная цена, необходимо перейти на следующий шаг

2

init() возвращает указатель на a1[1]. o.init()[-1]; вычитает 1 из этого указателя (так, вы получаете указатель на a1[0]) и разыгрываете его, и вы получаете a1[0].

Смежные вопросы