这个指针如何在数组中工作?

时间:2015-09-07 07:39:55

标签: c++

这是代码。

#include <iostream>

using namespace std;

int w=0;

class A{
  int k,n;
 public:
  int z;
  A(){w+=3; k=3+w; n=4+w; z=w;}
  A *fun1(){z=k*n; return this;}
  A *fun2(){z=n*k; return this-1;}
  friend int fun (A *a,int &b);
};

int fun(A *a,int &b)
{ b=a->z+=4;
  return a->k+a->n;
}

int main()
{ int m;
  A a[2];
  cout<<fun(a[1].fun1(),m)<<"\n";
  cout<<m<<"\n";
  cout<<fun(a[1].fun2(),m)<<"\n";
  cout<<m<<"\n";
  cout<<a[0].z+a[1].z<<"\n";
  return 0;
}

当返回此-1时,它意味着什么?这是否意味着返回的对象是[0]?我无法理解.. 谢谢!

2 个答案:

答案 0 :(得分:3)

与任何指针一样,从this减去1假设*this是数组的元素,给出数组中前一个对象的地址。在A::fun2()中有一个隐含的假设,*this是一个数组的元素,并且该数组中至少有一个前面的元素。

因此,在您的示例代码中,a[1].fun2()会返回a[0]的地址。即&a[0]

a[0].fun2()会返回一个等于&a[-1]的(指针)值。从概念上讲,这是指向不存在的对象的指针。在this-1中计算A::fun2()会产生未定义的行为,就像在a-1中计算main()一样。这种未定义行为的一个常见(但不是保证)实际症状是程序在以后解除引用指针时崩溃。

答案 1 :(得分:-3)

fun2(){z = n k;返回this-1;}

'this'是一个自引用指针。你不能从中减去1。 然后它将指向一个位于“this”指针

之前的内存位置