这个指针如何在数组中工作
how this pointer works in arrays?
代码如下:
#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'指针的前面一个
相关文章:
- 将返回值存储在函数指针数组的指针中是如何工作的?
- std::数组边界检查如何工作?
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 为什么指针在对二维数组进行排序时无法正常工作?
- C++中循环和 C 样式数组的范围工作
- 为什么重载运算符"="动态数组的类上无法正常工作?C++
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 为什么必须动态分配扩展数组才能使此功能正常工作C++
- 我正在努力处理多维数组输入和输出,我管理输入,但是打印无法按计划工作
- 将类型化数组写入子进程 stdin 无法正常工作
- 当删除 [] 指针工作时,为什么无法获得指向的数组大小?
- 如果带有字符数组的语句无法正常工作
- 使用 for 循环打印字符串数组无法正常工作 (C++)
- 字符串文字到 char 数组的转换如何在C++中实际工作
- 澄清了 strcpy() 在像这样初始化字符数组时的工作 *Arr.
- 在 C++ 中使用递归填充 D2 数组,有时工作正常,其他时会引发异常
- 为什么C ,Devstudio,数组索引工作
- 构建对象数组是如何工作的?我被这个例子困住了
- 我怎样才能让这个多维数组工作
- 在glUniformMatrix4fv, c++中2d数组工作吗?