c/c++语言开发共享结构的指针算法

给定一个包含一个double和三个int变量的结构定义(总共4个变量),如果p是指向此结构的指针,其值为0x1000,那么p ++有什么值?

这不是作业问题,所以不要担心。 我只是想为测试做准备,我无法弄清楚这个练习题。 谢谢

这是在C.是的,我希望p增加后的值。 这是一台32位机器

     struct foobar *p; p = 0x1000; p++; 

    是相同的

     struct foobar *p; p = 0x1000 + sizeof(struct foobar); 

    答案是它至少是

     sizeof(double) + (3*sizeof(int)) 

    它的“至少”原因是编译器或多或少可以根据底层架构的需要添加填充,以使其适合对齐约束。

    例如,假设您有一台64位字的机器,就像旧的CDC机器一样。 (地狱,其中一些有60位字,所以它还会更奇怪。)进一步假设在那台机器上, sizeof(double)是64位,而sizeof(int)是16位。 然后编译器可能将您的结构布局为

     | double | int | int | int | 16 bits padding | 

    这样整个结构可以通过2个内存引用中的机器传递,不需要移位或搞乱。 在这种情况下,sizeof(yourstruct_s)将为16,其中sizeof(double)+ (3*sizeof(int))仅为48 14。

    更新

    在32位机器上观察到这一点也是如此:那么你可能需要填充以使其适合三个单词。 我不知道现代机器没有解决这个字节,所以现在可能很难找到一个例子,但是一堆旧架构应该需要这个。

     p = p + sizeof(YourStruct) 

    如果不关闭填充,编译器可以自由决定返回的sizeof。

    指针算法以指针类型的大小为单位进行。

    因此,如果在指向结构的指针上执行p++ ,p将按sizeof *p字节前进。 即问问你的编译器你的struct与sizeof运算符有多大。

    需要了解更多c/c++开发分享结构的指针算法,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享结构的指针算法相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979684.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐