一个简单的测试
#include int a; int b; int c; int main() { int x; int y, z; printf("%d/n", &a); printf("%d/n", &b); printf("%d/n", &c); printf("/n"); printf("%d/n", &x); printf("%d/n", &y); printf("%d/n", &z); return 0; }
输出结果:
4214964 4214968 4214972 2293532 2293528 2293524可以看出,全局变量的地址分配是从内存编号小的地址开始,而函数内部的变量是从内存编号大的地址开始的。不过,这只是最简单的情形,所有变量都是4个字节的简单变量。接下来将针对各种情况做针对性的试验。
数组的地址分配
根据编程经验,可以推测一个数组的地址一定是连续的,并且,无论在何处定义,数组的地址都是随下标递增的。因此,下面两段代码才能等价地使用:
int i; int a[10]; for ( i=0; i < 10; ++i ) scanf("%d", &a[i]);
int i; int a[10]; for ( i=0; i < 10; ++i ) scanf("%d", a + i);
但是,数组的地址于其他变量的地址的关系还不能确定,需要做一些测试:
#include int a[4];