C语言变量内存地址的分配
来源:互联网 发布:显示器检测软件 编辑:程序博客网 时间:2024/05/16 12:57
一个简单的测试
#includeint 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;}
输出结果:
421496442149684214972229353222935282293524可以看出,全局变量的地址分配是从内存编号小的地址开始,而函数内部的变量是从内存编号大的地址开始的。不过,这只是最简单的情形,所有变量都是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);
但是,数组的地址于其他变量的地址的关系还不能确定,需要做一些测试:
#includeint 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], &a[2]);printf("%X %d/n", &a[3], &a[3]);printf("/n");printf("%X %d/n", &x[0], &x[0]);printf("%X %d/n", &x[1], &x[1]);printf("%X %d/n", &x[2], &x[2]);printf("%X %d/n", &x[3], &x[3]);printf("%X %d/n", &y, &y);return 0;}
输出结果:
4050C4 42149804050B4 42149644050B8 42149684050BC 42149724050C0 421497622FF10 229352022FF14 229352422FF18 229352822FF1C 229353222FF0C 2293516如果根据第一次试验的得出规则,先定义的int a[10];应该比int b;先分配空间,得到更高编号的地址,但是实际上b的地址却是最高的。如果将
int a[4];int b;交换为:
int b;int a[4];结果为:
4050C4 42149804050B4 42149644050B8 42149684050BC 42149724050C0 421497622FF10 229352022FF14 229352422FF18 229352822FF1C 229353222FF0C 2293516和上次没有变化。于是,可以暂时作如下假设:第二次是按正常规则,先分配b的地址,为最高编号,而第一次确实是先分配的a的地址,但不是将编号最高的地址分配给了它,因此,空出来的位置就留给了后来的b。
未完。
- C语言变量内存地址的分配
- C语言中变量的地址分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- C语言的变量的内存分配
- c语言变量的内存分配
- C语言输出 编译器为变量分配的内存地址 %p
- C语言变量内存分配
- 关于C语言给变量分配地址
- C语言中内存地址是如何分配的
- C语言进程的内存地址空间分配
- 关于c语言的变量存储及内存分配
- windows程序设计 之 「CLOCK」范例分析笔记
- Mac小技巧
- 1.4 指针
- FreeBSD Apache HTTPS配置
- setInterval() 用法
- C语言变量内存地址的分配
- ffmpeg阅读笔记
- Android platform 编译工具安装,源码的下载、编译
- 双网卡的回环测试
- 大家好!!
- phpmysql的后续配置
- 开通博客
- 图:杭州中级人民法院演讲比赛于9月29日圆满结束.其主题图片展示。
- 当Generic.xaml遇上BitmapImage:发现一个疑似WPF Bug而又不似Bug的问题