我遇到了一个带有函数调用的语句,以及下面提到的代码类型中的数组索引。在此语句中,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;
}
答案 0 :(得分:2)
init()
返回指向a1[1]
的指针。 o.init()[-1];
从该指针中减去1(因此,您得到指向a1[0]
的指针)并取消引用它,然后得到a1[0]
。
答案 1 :(得分:1)
init返回一个char *,所以init()[ - 1]只会将指针一个字符串向后移入内存中。
想象一下:
char* arr = o.init();
然后:
arr--;
正如你所看到的,你的函数返回数组+ 1,所以为了取'a',或者更确切地说是第一个值,你必须向后退一步
答案 2 :(得分:1)
方法的返回值为char*
。所以索引操作符从地址中减去一个,然后取消引用它。