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...........
請教各位版友對這種題目見解 究竟怎樣才是對的
謝謝