结构和指针算法

structures and pointer arithmetic

本文关键字:算法 指针 结构      更新时间:2023-10-16
    #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 行中。日志错误:

与 ' *dptr=1' 中的 operator= ' 不匹配

 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的,您应该没事。

您需要

dptr声明为 int* ,而不是 demo*

int *dptr=&d1; // might need type cast (int*)
*dptr=1 ;