实验1:struct.c
实验代码:
#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; /* Possibly out of bounds */
return s.d; /* Should be 3.14 */
}
int main(int argc, char *argv[]) {
int i = 0;
if (argc >= 2)
i = atoi(argv[1]);
double d = fun(i);
printf("fun(%d) --> %.10f\n", i, d);
return 0;
}
将如上代码在Ubuntu中编译后输入数据0、1、2、3、4、5后分别得到如下结果:
可以发现当输入数据2和3时,原数据3.1400000000发生了变化,而当继续输入数据4、5时,又恢复了原数据,为何会出现这样的情况呢?
我们可以看到在:
double fun(int i) {
volatile struct_t s;
s.d = 3.14;
s.a[i] = 1073741824; /* Possibly out of bounds */
ret