- 初始化并访问
outer
结构体中inner
的num
成员:
#include <stdio.h>
struct Inner {
char c;
int num;
};
struct Outer {
struct Inner inner;
double d;
char arr[3];
};
int main() {
struct Outer outer = {
.inner = {
.c = 'a',
.num = 10
},
.d = 3.14,
.arr = {'x', 'y', 'z'}
};
// 访问inner的num成员
printf("outer.inner.num: %d\n", outer.inner.num);
return 0;
}
- 结构体整体大小的计算方式:
- 对于
struct Inner
:
char c
占1字节,由于4字节对齐,补齐3字节,int num
占4字节,所以struct Inner
大小为1 + 3 + 4 = 8
字节。
- 对于
struct Outer
:
struct Inner inner
占8字节。
double d
占8字节。
char arr[3]
占3字节,补齐1字节以满足4字节对齐。
- 因此,
struct Outer
的大小为8 + 8 + 3 + 1 = 20
字节。
- 对成员访问的潜在影响:
- 内存对齐会导致结构体内部存在填充字节,这虽然增加了结构体的整体大小,但能提高内存访问效率。因为现代计算机在读取内存时通常以特定的对齐边界进行操作,对齐的数据能更高效地被读取和写入。例如,若数据未对齐,可能需要进行多次内存访问才能获取完整的数据,而对齐后可以一次读取完成,提升了性能。同时,在跨平台开发时,不同系统的内存对齐规则可能不同,这可能导致结构体大小和成员偏移量的变化,从而影响成员的正确访问,所以编写代码时需要注意内存对齐的兼容性。