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

how this pointer works in arrays?

本文关键字:数组 工作 指针      更新时间:2023-10-16

代码如下:

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

当return this-1发生时,这意味着什么?这是否意味着返回的对象是[0]?我不明白……谢谢!

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

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

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

A fun2(){z=nk;返回1;}

'this'是一个自引用指针。你不能从这个减去1。然后它将指向一个内存位置,该位置在'this'指针的前面一个