由于包含一张双人床和3个int变量(4个变量在所有),如果p是一个指针,这个结构与值0x1000的一个结构的定义,并p ++有什么价值?
这不是一个家庭作业的问题,所以不用担心。我只是想为测试做准备,我无法弄清楚这种做法的问题。谢谢
这是C.是的,我想p的值就递增后。这是一个32位的机
struct foobar *p;
p = 0x1000;
p++;
是相同的
struct foobar *p;
p = 0x1000 + sizeof(struct foobar);
指针运算在指针类型的大小为单位进行。
所以,如果你做p++
上的指针,你的结构,对将sizeof *p
字节前进。即只问你的编译器为你的结构有多大用sizeof
运营商。
答案是,它至少
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将返回。
在数据类型的基础地址A增量等于基地址+的sizeof(数据类型)