C++ 结构与指针算法 #包括 #包括 使用名称空间std; 结构演示{ int-one; int-2; int三; }; int main() { 演示d1; 演示*dptr=&d1; *dptr=1; ++dptr; *dptr=2; ++dptr; *dptr=3; 返回0; }

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; }

请解释为什么上面的代码看起来合乎逻辑,但实际上不起作用 在代码的第13行。日志错误:

*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);