堆 栈

1.栈一般比较小,几十兆,但递归太多,局部变量太大栈会溢出

2.例子

int a[100];
for(int i = 0;i<100;i++)
    a[i] = 99;
print("%d-%d-%d-%d-%d");

程序的输出结果是:0-0-0-99-99

解释:前面三个0不知道为什么,后面的两个99是输出了数组a的两个元素,随着程序的运行,局部变量被放入栈中,

执行到print时,格式字符串"%d-%d-%d-%d-%d"

需要五个整数参数,从printf四个字节四个字节处往下找,在这次运行中,前三个参数在内存空间中刚好表示为0,第四和第五个参数找到了数组a中的元素。很幸运没有出错。。

下面看一个正常点的输出语句:

int a = 99;
printf("%d",n);

程序运行完printf语句后在对应的内存空间中是这样的

补充一点:c语言中的字符串就是字符数组,格式字符串的指针指向存放“%d”字符数组的内存空间

程序将printf函数中的第二个参数n的数值复制存放在栈中(当有多个参数的时候,根据栈后进先出的顺序存放到栈中),本例子是99,然后根据格式字符串向下取数据,就把99取了出来,输出。

 

 

 

posted @ 2013-09-28 16:45  亘大  阅读(168)  评论(0)    收藏  举报