|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在函数中定义的变量,默认是自动变量,具有自动存储期,在函数结束的时候会释放相应的空间。那为什么下面这个代码可以输出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);
}
1. 你的程序有bug,add 函数不应该返回临时变量的地址。
2. 第一次听说自动存储期。
3. 一般情况下,编写程序,只需要考虑,堆和栈即可。堆空间为进程共享,栈空间为函数独享。地址空间段不同,增长方向也不同。栈空间在函数结束时自动释放,即所有的变量都会被还给操作系统。堆变量需要程序员手工释放,当然了,进程结束时,仍然会被回收。所以,你的 add 函数返回了 栈空间的地址,是一个bug,在某些编译器可以工作,在某些提示为 warning,在某些提示为 error。
|
|