gpt4 book ai didi

c - C 结构是否将其成员保存在连续的内存块中?

转载 作者:行者123 更新时间:2023-12-03 18:10:23 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Struct memory layout in C

(3 个回答)


2年前关闭。




假设我的代码是:

typedef stuct {
int x;
double y;
char z;
} Foo;

x , y , 和 z ,在内存中彼此相邻?指针算术可以“迭代”它们吗?
我的 C 生锈了,所以我不能完全正确地测试这个程序。
这是我的完整代码。
#include <stdlib.h>
#include <stdio.h>

typedef struct {
int x;
double y;
char z;
} Foo;


int main() {
Foo *f = malloc(sizeof(Foo));
f->x = 10;
f->y = 30.0;
f->z = 'c';
// Pointer to iterate.
for(int i = 0; i == sizeof(Foo); i++) {
if (i == 0) {
printf(*(f + i));
}
else if (i == (sizeof(int) + 1)) {
printf(*(f + i));
}
else if (i ==(sizeof(int) + sizeof(double) + 1)) {
printf(*(f + i));
}
else {
continue;
}
return 0;
}

最佳答案

不,不保证 struct成员在内存中是连续的。

从 C 标准中的 §6.7.2.1 第 15 点开始(第 115 页 here):

There may be unnamed padding within a structure object, but not at its beginning.



大多数时候,类似:
struct mystruct {
int a;
char b;
int c;
};

确实与 sizeof(int) 对齐, 像这样:
 0  1  2  3  4  5  6  7  8  9  10 11
[a ][b][padding][c ]

关于c - C 结构是否将其成员保存在连续的内存块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59850117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com