C 语言中的内存分配机制暂不了解!
GCC --version
6.3.0-18+deb9u1 20170516
代码
#include<stdio.h>
int main{
int a[3]={1,2,3};
int i;
printf("%p %p %p %p %p\n",&a[0],&a[1],&a[2],&a[3],&i);
for(i=0;i<=3;i++){
a[i]=0;
printf("%d\n",a[i]);
}
return 0;
}
运行结果:
0x7ffc993e48e4 0x7ffc993e48e8 0x7ffc993e48ec 0x7ffc993e48f0 0x7ffc993e48e0
0
0
0
0
发现变量 i 的地址是在数组之前。
改变一下程序:先声明 i
#include<stdio.h>
int main{
int i;
int a[3]={1,2,3};
printf("%p %p %p %p %p\n",&a[0],&a[1],&a[2],&a[3],&i);
for(i=0;i<=3;i++){
a[i]=0;
printf("%d\n",a[i]);
}
return 0;
}
0x7ffc993e48e4 0x7ffc993e48e8 0x7ffc993e48ec 0x7ffc993e48f0 0x7ffc993e48f0
0
0
0
0
...
...
可以看到 变量 i 在内存中的地址实际上就是 a[3] 在内存中的地址,可是我明明是先声明的变量 i ,难道是因为没有定义?
即使先定义i
int i=0;
结果一样!
不明白为什么!希望以后可以回来解答。