栈的概念
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,特点“先进后出”,“后进先出”,插入一个元素(压栈),删除一个元素(出栈)。
栈区的默认使用规则
1 先使用高地址处的空间。
2在使用低地址处的空间。
栈区 | 1、局部变量 2、函数的形式参数 3、函数调用也开辟空间 |
堆区 | 1、动态内部分配 2、maloc/free 3、realloc 4、calloc |
静态区 | 1、全局变量 2、静态变量 |
压栈的案例1
压栈例子2
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; //调换 int arr【10】 和 int i=0 位置使得 i的地址 // 始终在arr后面死循环消失但是会报警告
int i = 0;
for (i = 0; i <= 12; i++)
{
printf("hehe\n");
arr[i] = 0;
}
return 0;
}
由&i和&arr【11】、&arr【12】得随着i越来越大arr[i]存在某个arr【i】的地址覆盖的地址
使得i=arr【i】=0 出现死循环
当i=20时出现死循环 (本版本号为VS2022)
//Vc6.0环境下<=10就死循环了
/ /gcc编译器<=11就死循环了
/ /VS2013<=12死循环
1.栈区的默认使用:先使用高地址处的空间再使用低地址处的空间
2.数组随着下标的增长地址是由低到高变化
release版本 和debug版本区别
release版本 和debug版本程序的的内存位置都会不一样