给定一个包含一个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