#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;
}
请解释为什么上面的代码看起来合乎逻辑但实际上不起作用 在代码的第13行。记录错误:
与“
中的“operator=
”*dptr=1
”不匹配
答案 0 :(得分:1)
demo d1;
demo *dptr=&d1;
*dptr=1 ;
++dptr;
dptr=2;
++dptr;
dptr=3;
dptr
是指向demo
结构的指针。因此,*dptr = 1
与d1 = 1;
基本相同,这是无效的。
另外,拥有该类型的指针并对该指针执行++
会对该类型应用指针算法,推送指针sizeof(demo)
,这不是您想要的。您需要通过强制转换来创建int
指针,然后使用该指针读取3个字段
int* dptr=reinterpret_cast<int*>(&d1);
然而,填充仍然会破坏你的一天,因为它们都是int
你应该没事。
答案 1 :(得分:0)
您需要将dptr
声明为int*
,而不是demo*
。
int *dptr=&d1; // might need type cast (int*)
*dptr=1 ;