结构和指针算术

时间:2016-07-12 13:26:51

标签: c++

    #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”不匹配

2 个答案:

答案 0 :(得分:1)

 demo d1;
 demo *dptr=&d1;

 *dptr=1 ;  
 ++dptr;
 dptr=2;
 ++dptr;
 dptr=3;

dptr是指向demo结构的指针。因此,*dptr = 1d1 = 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 ;