请教C语言中局部变量的问题

jiayou2015 2015-06-20 02:31:19
代码中的数组a不是函数try()定义的局部变量吗,局部变量在函数调用结束后不是就自动销毁了,但为什么在主函数中仍能用它的地址去访问数组a中的元素?求大神指点迷津,谢谢

程序代码:
#include<stdio.h>

int *try()
{
int a[2]={10,20};

return a;
}

int main()
{
int *p;

p=try();

printf("%d\n",p[1]);

return 0;
}
...全文
86 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiayou2015 2015-06-22
  • 打赏
  • 举报
回复
引用 1 楼 jack139139 的回复:
return a; 返回的是数组地址,也就是指针,局部变量是放在调用堆栈里的,函数退出了,堆栈释放了,但数据还在。看下编译后的汇编就明白了。不过也跟编译器有关系。你可以做个实验,main里调用try两次,对a的赋值两次不同,看第一次数据的还在不在?
引用 3 楼 gzwgyfgpf 的回复:
你这不是局部变量的问题,而是数据在内存中的存储问题,你的代码中try()函数传递的是数组的地址,所以主函数中仍可以操作数组
谢谢两位的解答
gzwgyfgpf 2015-06-20
  • 打赏
  • 举报
回复
你这不是局部变量的问题,而是数据在内存中的存储问题,你的代码中try()函数传递的是数组的地址,所以主函数中仍可以操作数组
jack139139 2015-06-20
  • 打赏
  • 举报
回复
补充一下,C不是严格意义的高级语言,应该算中级语言,对语言的安全性并不进行过多检查,所有C可以干一些很低级的事情,同样也可以做一些别的高级语言做不到的技巧。
jack139139 2015-06-20
  • 打赏
  • 举报
回复
return a; 返回的是数组地址,也就是指针,局部变量是放在调用堆栈里的,函数退出了,堆栈释放了,但数据还在。看下编译后的汇编就明白了。不过也跟编译器有关系。你可以做个实验,main里调用try两次,对a的赋值两次不同,看第一次数据的还在不在?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧