作者tenfaces (我爱三筒小叮当~~)
看板Programming
标题[问题] 函数结束时 区域变数会跟着清空吗?
时间Sun Apr 19 23:41:18 2009
请先看问题程式码 这是某考题
int *f(int x){
int y;
y=x+10;
return &y;}
int g(int y){
int x;
x=y-10;
return x;}
void main() {
int *x,y;
x=f(10);
y=g(*x);
printf("%d %d\n",*x,y); }
印出来的结果 我笔算 和 程式跑出来 都是--> 10,10
但老师在解题是 认为 二者答案都是 不确定 依各编译器实作而自订
他的观念是 function f 和 g 在被呼叫完之後 区域变数就清空
所以当main在运算 *x 还有 y的时候 以无法参考到原有的记忆体位置
听他的观念 觉得很合理 但实际上用Visual C++跑 又不是这麽回事
请有经验的版友 替我解惑 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.28.78
1F:推 jtmh:所谓区域变数清空是概念上的,程式实际执行时 218.175.149.46 04/20 00:00
2F:→ jtmh:只是把 stack pointer 改掉而已,所以还是有 218.175.149.46 04/20 00:02
3F:→ jtmh:可能可以存取到那个值,不过就跟你们老师说的 218.175.149.46 04/20 00:03
4F:→ jtmh:一样,那是依各编译器实作而自订的,你不能依 218.175.149.46 04/20 00:03
5F:→ jtmh:赖这种 behavior, 否则程式何时要爆掉都不知 218.175.149.46 04/20 00:04
6F:→ jtmh:道,像我加上最佳化之後,印出来的值就变成: 218.175.149.46 04/20 00:05
7F:→ jtmh:134518108 134518098 (gcc v4.2.3) 218.175.149.46 04/20 00:06
8F:推 jtmh:另外建议参考 C_and_CPP 版置底文 "C 语言新 218.175.149.46 04/20 00:10
9F:→ jtmh:言新手十诫(增修一版)" 中的第六诫。 218.175.149.46 04/20 00:11
10F:→ tenfaces:非常感谢你 好棒的观念 完全懂了 谢谢 114.42.28.78 04/20 00:23
11F:→ tenfaces:另外我会注意看置底文的的 谢谢你 114.42.28.78 04/20 00:24