C++ 结构与指针算法 #包括 #包括 使用名称空间std; 结构演示{ int-one; int-2; int三; }; int main() { 演示d1; 演示*dptr=&d1; *dptr=1; ++dptr; *dptr=2; ++dptr; *dptr=3; 返回0; }
请解释为什么上面的代码看起来合乎逻辑,但实际上不起作用 在代码的第13行。日志错误: “C++ 结构与指针算法 #包括 #包括 使用名称空间std; 结构演示{ int-one; int-2; int三; }; int main() { 演示d1; 演示*dptr=&d1; *dptr=1; ++dptr; *dptr=2; ++dptr; *dptr=3; 返回0; },c++,C++,请解释为什么上面的代码看起来合乎逻辑,但实际上不起作用 在代码的第13行。日志错误: “*dptr=1”中的“运算符=”不匹配 您需要将您的dptr声明为int*,而不是demo* #include <iostream> #include <cmath> using namespace std; struct demo{ int one; int two; int three; }
*dptr=1
”中的“运算符=
”不匹配
您需要将您的
dptr
声明为int*
,而不是demo*
#include <iostream>
#include <cmath>
using namespace std;
struct demo{
int one;
int two;
int three;
};
int main()
{
demo d1;
demo *dptr=&d1;
*dptr=1 ;
++dptr;
*dptr=2;
++dptr;
*dptr=3;
return 0;
}
dptr
是指向demo
结构的指针。因此,*dptr=1
与d1=1基本相同代码>,这是无效的
另外,拥有该类型的指针并对该指针执行++
操作将为该类型应用指针算法,推送指针sizeof(demo)
,这不是您想要的。您需要通过强制转换创建一个int
指针,然后使用该指针读取3个字段
demo d1;
demo *dptr=&d1;
*dptr=1 ;
++dptr;
dptr=2;
++dptr;
dptr=3;
int*dptr=重新解释铸件(&d1);
不过,填充仍然会破坏你的一天,因为它们都是int
,你应该没事。因为你实际上是在做d1=1代码>-如何工作?您试图将演示结构的值设置为int,什么?多亏了immibis,愚蠢的方法,代码在我看来不符合逻辑。Gill理解得很好,但我想如果我选择[int*dptr=reinterpret_cast(&d1);]有人会问,“如果所有成员都是int类型,为什么不使用数组呢?”?“是吗?@user3568438也许是的,我不确定你的用例是什么。
demo d1;
demo *dptr=&d1;
*dptr=1 ;
++dptr;
dptr=2;
++dptr;
dptr=3;
int* dptr=reinterpret_cast<int*>(&d1);