15929929146 发表于 2020-5-12 23:17:47

关于自动存储期,不懂的地方。

在函数中定义的变量,默认是自动变量,具有自动存储期,在函数结束的时候会释放相应的空间。那为什么下面这个代码可以输出p所指向的函数中变量s的值???小白求教。在此先感谢大佬讲解。
#include<stdio.h>
int *add(int a,int b)
{
int s;
s=a+b;
return &s;
}
int main(void)
{
int a=1,b=2;
int *p;
p=add(a,b);
printf("%d\n",*p);
}

赚小钱 发表于 2020-5-12 23:51:00

1. 你的程序有bug,add 函数不应该返回临时变量的地址。
2. 第一次听说自动存储期。
3. 一般情况下,编写程序,只需要考虑,堆和栈即可。堆空间为进程共享,栈空间为函数独享。地址空间段不同,增长方向也不同。栈空间在函数结束时自动释放,即所有的变量都会被还给操作系统。堆变量需要程序员手工释放,当然了,进程结束时,仍然会被回收。所以,你的 add 函数返回了 栈空间的地址,是一个bug,在某些编译器可以工作,在某些提示为 warning,在某些提示为 error。

永恒的蓝色梦想 发表于 2020-5-13 08:28:03

赚小钱 发表于 2020-5-12 23:51
1. 你的程序有bug,add 函数不应该返回临时变量的地址。
2. 第一次听说自动存储期。
3. 一般情况下,编写 ...

2.没声明 static……什么的都是自动存储期

chxchxkkk 发表于 2020-5-13 09:31:38

自动存储期应该是翻译不同,其实说的是 auto声明的自动变量,在函数中没有被声明为其他类型的变量默认都是自动变量,因此auto算是C语言中应用最广泛的一种类型

赚小钱 发表于 2020-5-13 11:22:44

永恒的蓝色梦想 发表于 2020-5-13 08:28
2.没声明 static……什么的都是自动存储期

感谢,我去查一下资料。

赚小钱 发表于 2020-5-13 11:30:42

https://www.cnblogs.com/tjyuanxi/p/9357652.html

页: [1]
查看完整版本: 关于自动存储期,不懂的地方。