tan*_*grs 20
struct foobar *p;
p = 0x1000;
p++;
Run Code Online (Sandbox Code Playgroud)
是相同的
struct foobar *p;
p = 0x1000 + sizeof(struct foobar);
Run Code Online (Sandbox Code Playgroud)
答案是至少是
sizeof(double) + (3*sizeof(int))
Run Code Online (Sandbox Code Playgroud)
它“至少”的原因是编译器或多或少可以自由地根据底层架构的需要添加填充,以使其适应对齐约束。
举例来说,假设您有一台具有 64 位字的机器,例如旧的 CDC 机器。(天哪,其中一些有 60 位字,所以它会变得更奇怪。)进一步假设在那台机器上,sizeof(double)
是 64 位,而sizeof(int)
是 16 位。然后编译器可能会将你的结构布局为
| double | int | int | int | 16 bits padding |
Run Code Online (Sandbox Code Playgroud)
这样整个结构就可以通过机器在 2 个内存引用中传递,无需移动或混乱。在这种情况下,sizeof(yourstruct_s) 将为 16,而
sizeof(double)+ (3*sizeof(int))
只有48 14。
更新
请注意,这在 32 位计算机上也可能成立:那么您可能需要填充以将其放入三个单词中。我不知道有哪台现代机器不能寻址到字节,所以现在可能很难找到一个例子,但许多旧的体系结构可能需要这个。
指针运算以指针类型的大小为单位进行。
因此,如果您p++
对指向结构的指针执行此操作,p 将前进sizeof *p
字节。即只需询问您的编译器您的结构体与运算符有多大sizeof
。
归档时间: |
|
查看次数: |
21345 次 |
最近记录: |