c语言操作堆区函数 c语言堆区和栈区的区别

请用C语言编写一个堆栈函数程序//该程序简单并可正确运行,希望kutpbpb的回答能对你有所帮助!
#includestdio.h
#define N100
typedef struct
{
int value[N];
int base;
int top;
}Sta;
void print()
{
printf("\n菜单:");
printf("\n1.入栈:");
printf("\n2.出栈:");
printf("\n3.退出:");
}
void printS(Sta S)
{
printf("\n请输出栈中元素:");
for(int i=S.top;i!=S.base;i--)
printf("%d",S.value[i-1]);
}
void pushS(Sta S,int e)
{
if(S.top==N)
printf("\n栈满");
else
S.value[S.top++]=e;
}
void popS(Sta S,int e)
{
if(S.top==S.base)
printf("\n栈空");
else
{
e=S.value[--S.top];
printf("\n请输出出栈元素: %d",e);
}
}
void main()
{
Sta S;
int e,choose;
S.base=S.top=0;
do{
print();
printf("\n请输入你的选项:");
scanf("%d",choose);
switch(choose)
{
case 1:
printf("\n请输入入栈元素:");
scanf("%d",e);
pushS(S,e);
printS(S);
break;
case 2:
popS(S,e);
printS(S);
break;
case 3:
default:
break ;
}
if(choose==3)
break;
}while(1);
}
C语言栈区、堆区的使用 , typedef和sizeof的使用1、栈区c语言操作堆区函数的使用
栈区写入内存的的顺序是先进后出 。
存放的是函数的参数、返回值、局部变量
由编译器管理数据开辟和释放
变量的生命周期在该函数结束后自动释放
不要返回局部变量的值c语言操作堆区函数,因为局部变量在函数执行之后就释放掉c语言操作堆区函数了c语言操作堆区函数 , 无法读取原来的内存
2、堆区的使用
堆区的空间远远大于栈区
它没有先进后出的数据结构
由程序员手动开辟和释放,malloc、calloc开辟free释放
注意c语言操作堆区函数:
如果主调函数中没有给指针分配内存,那么被调函数中需要利用高级指针给主调函数中的指针分配内存
3.数据区放的是静态变量、全局变量以及常量
static静态变量: 编译阶段分配内存,只能在当前文件内使用,只初始化一次
ertern全局变量:C语言下默认的全局变量前都默认隐藏了该关键字
4.const修饰的变量
直接修改const修饰的全局变量:失败
简介修改const修饰的全局变量:失败,原因是放在常量区,受到保护
直接修改const修饰的局部变量:失败
直接修改const修饰的局部变量:成功,该局部变量其实放到了栈区,是伪常量
5.字符串常量
不同编译器的处理方式有所区别
ANSI并未指定它的修改方式
有些编译器可以修改字符串常量,但有些不可以,某些编译器将相同的字符串常量看做同一个字符串常量
6.void的使用方式
无类型,不可以创建变量,无法分配内存
限定函数返回值
限定函数参数列表
void*是万能指针,不需要强制转化就可以给其他指针赋值
7.sizeof的使用
sizeof的本质其实是一个运算符,类似于+-*/
当统计某类型占的空间时需要加()
当统计mou变量占的空间时无需加()
返回值的类型是无符号整形,即unsigned int
数组名称如果作为函数参数,会退化为指针,指向数组首元素
8.typedef的使用
它可以给类型起别名
简化struct关键字
区分数据类型
提高代码的可移植性
c语言如何将函数调用堆栈打印出来可以直接用输出在函数内部调用时,把调用顺序打印出来 。

推荐阅读