先看代码
#include<stdio.h> #include<stdlib.h> typedef struct { int a[2]; double d; } struct_t; double fun(int i) { volatile struct_t s; s.d = 3.14; s.a[i] = 1073741824; return s.d; } int main(void) { printf("%lf ", fun(0)); printf("%lf ", fun(1)); printf("%lf ", fun(2)); printf("%lf ", fun(3)); //printf("%lf ", fun(4)); system("pause"); return 0; }
打印fun函数当输入0到3时,输出会不一样:
当函数输入4时,程序运行错误:
前4项正常输出,到输出fun(4)时,则程序会报错,这是为什么呢!!!
我们可以看到在struct这个结构体在内存中的排列顺序为a中有两个int类型,各占四个字节,d为double类型,占8个字节,如下图: