-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.
第一:
函数调用时的栈
? 程序中的“ 函数调用栈” 是栈数据结构的一种应用
? 函数调用栈一般是从高地址向低地址增长的
栈底为内存的高地址处
栈顶为内存的低地址处
? 函数调用栈中存储的数据为活动记录
第二:
程序中的栈
? 程序中的栈空间可看做一个顺序栈的应用
? 栈保存了一个函数调用所需的维护信息
? 函数参数 , 函数返回地址
? 局部变量
? 函数调用上下文
栈溢出 :
? 在不断的压栈过程中造成栈空间耗尽而产生栈溢出
? 栈溢出常由于函数递归过深或局部数组过大造成
#include <stdio.h>
void reverse(char* s)
{
if( (s != NULL) && (*s != '\0') )
{
reverse(s + 1);//*s 从1指到5
printf("%c", *s);
}
}
int main()
{
reverse("12345");//递归调用,后进先出
printf("\n");
return 0;
}
小结
? 程序栈空间在本质上是一种顺序栈
? 程序栈空间的访问是通过函数调用进行的
? 程序栈空间仍然遵从 后进先出 的规则