c语言为什么先定义的数组地址大而后定义的数组地址小

我定义了两个数组,分别为int a[]={1,2};int b[]={3,4};然后printf("%d %d\n",a,b);运行结果发现a=1245048,b=1245040,改变数组的大小或者类型都是同样的情况,为啥先定义的数组反而地址大而后定义的数组反而地址小呢?

首先你需要了解栈和堆的概念,函数内的变量都是从栈中分配的,malloc的都是从堆中分配的;

堆是向上增长(由低到高),栈是向下增长(由高到低)

你的数组a和b都是函数变量,是栈空间分配的,所以a的地址小于b追问

为什么堆是向上增长,栈是向下增长啊?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-11
对于数组,C编译器在编译时,只要找到一个能容纳下数组的连续的空闲空间,就分配给数组。就是说,数组分配在什么地方由编译器决定。一般情况下,程序无法干预数组空间的分配过程,你也无法预知究竟分配在什么地方。
第2个回答  2013-10-11
你定义的是两个不同的数组,计算机值跟他分配空间地址,不会强求一定先定义的地址就小些,有空闲位置他就会拿来用,不管你地址是大还是小
第3个回答  2013-10-11
x86,x64架构的CPU的栈都是向下生长的,这和你编译器对应的硬件平台有关
相似回答