一个简单的测试
#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];
int b;
int main()
{
int x[4];
int y;
printf("%X %d/n", &b, &b);
printf("%X %d/n", &a[0], &a[0]);
printf("%X %d/n", &a[1], &a[1]);
printf("%X %d/n", &a[2]
C语言中数组内存地址探究

本文通过一个简单的测试探讨了C语言中数组内存地址的分配情况。指出数组的地址是连续的,随着下标递增,但在不同变量间的地址关系需要进一步测试以明确。
最低0.47元/天 解锁文章
637





