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);
}
这是一题国考考题
出现两种版本的答案
版本一:函数所使用的变量型态与数量一样,内存会配置到同样的位置
所以f跟g的区域变量共用相同内存位址 主程式的指标x当f执行结束跟着执行g时
会指到g当中的区域变量x 印出结果10 10
版本二:副程式执行结束后所属内存会被释放 因此主程式中的x变成悬疑指标
指像什么东西变成不知道,至于两个副程式的区域变量共用到相同内存只能说有可能
但不是铁律 印出结果 不确定 不确定(因为x后来指到的是系统内存 不确定内容)
![]()
这是某位补习班老师的解答,也就是版本二
至于版本一我是参考一本补习班出的 胡世雄 程式语言得参考书
自己用dev c++跑的确是10 10,两个副程式的区域变量也的确共用相同内存位址
但自己以往所学的确是版本二比较合理
这是国考非选 所以没有标准答案 也不知道当初怎样的答案会拿分....
这是我觉得国考很黑箱的一个地方Orz...........
请教各位版友对这种题目见解 究竟怎样才是对的
谢谢