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;
}
4

3 回答 3

2

init()返回指向 的指针a1[1]o.init()[-1];从该指针中减去 1(因此,你得到一个指向 的指针a1[0])并取消引用它,你得到a1[0].

于 2013-03-25T08:54:12.180 回答
1

init 返回一个 char* 所以 init()[-1] 只会在内存中将指针向后取一个字符。

想象一下:

char* arr = o.init();

接着:

arr--;

如您所见,您的函数返回数组+1,因此为了获取“a”,或者更确切地说是第一个值,您必须后退一步

于 2013-03-25T08:53:49.957 回答
1

方法的返回值为char*. 所以索引运算符从地址中减一,并取消引用它。

于 2013-03-25T08:53:56.897 回答