Re: [考題] 程式語言 96交通升資
此篇觀念為錯誤觀念 請勿參考
※ 引述《okstephen1 (ㄌㄩㄝ)》之銘言:
: [考題] 國考歷屆考題與考題觀念討論(書裡看到的選這個)請附上想法、出處
: 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);
: }
活動記錄一開始是Main
local y
main local x
==>執行函數f
dynamic link(指到main)
return address(return to main)
funtion value(指到local y的位址)
local x 10
f local y 20
local x
main local y
==>f返回main後
dynamic link(指到main)
return address(return to main)
funtion value(指到local y的位址)
local x 10
f local y 20 紅色部分因函數執行結束已釋放
local x 指到f執行時local x的address 也就是*x=10
main local y
==>執行函數g
dynamic link(指到main)
return address(return to main)
funtion value 10
local y 20
g local x 10
local x 此時指到g的local x(也是f執行時local x的address) 也就是*x=10
main local y
執行結束後return 10給Main中的y
由於兩個分別獨立且分別呼叫的函式 所以他們的參數和區域變數會共用相同位址
也就是函數f的參數x跟函數g的參數y用相同記憶體(中央堆疊)
函數f的區域變數y跟函數g的區域變數x用相同記憶體
因此當函數f執行完時 main中的x指到一塊記憶體其內容為10
且此記憶體後來又給了函數g中的區域變數x使用
也就是當執行函數g時 main中的x是指到函數g中的區域變數x
所以當函數g中把區域變數x改成10時
主程式的main的x指向的記憶體也會被改成10(同一塊)
我自己剛看這題也是看不懂 想很久
後來自己跑程式就了解了
以下程式
void A()
{
int a=10; //如果你改成int *a=new int(10); 那b印出來就是亂數了
//因為a就變成指到堆積區(heap)而不是中央堆疊(stack)的記憶體了
}
void B()
{
int b;
cout<<b;
}
int main()
{
A();
B();
}
結果會印出10 你把A中的a改成多少 b就是印出多少 相同的道理
有錯麻煩指正...我是自己看書沒人可以問是不是這樣思考是正解...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.82.109
※ 文章網址: http://www.ptt.cc/bbs/Examination/M.1396195361.A.087.html
※ 編輯: Sunofgod (218.164.82.109), 03/31/2014 00:13:07
※ 編輯: Sunofgod (218.164.82.109), 03/31/2014 00:15:00
推
03/31 08:09, , 1F
03/31 08:09, 1F
→
03/31 08:11, , 2F
03/31 08:11, 2F
→
03/31 08:16, , 3F
03/31 08:16, 3F
→
03/31 08:17, , 4F
03/31 08:17, 4F
→
03/31 08:18, , 5F
03/31 08:18, 5F
→
03/31 08:19, , 6F
03/31 08:19, 6F
→
03/31 11:06, , 7F
03/31 11:06, 7F
→
03/31 11:07, , 8F
03/31 11:07, 8F
→
03/31 11:09, , 9F
03/31 11:09, 9F
→
03/31 11:09, , 10F
03/31 11:09, 10F
推
03/31 11:28, , 11F
03/31 11:28, 11F
→
03/31 11:29, , 12F
03/31 11:29, 12F
→
03/31 11:33, , 13F
03/31 11:33, 13F
→
03/31 11:34, , 14F
03/31 11:34, 14F
→
03/31 11:34, , 15F
03/31 11:34, 15F
推
03/31 14:07, , 16F
03/31 14:07, 16F
→
03/31 14:08, , 17F
03/31 14:08, 17F
→
03/31 14:12, , 18F
03/31 14:12, 18F
→
03/31 14:12, , 19F
03/31 14:12, 19F
→
03/31 14:26, , 20F
03/31 14:26, 20F
→
03/31 14:26, , 21F
03/31 14:26, 21F
→
03/31 14:29, , 22F
03/31 14:29, 22F
→
03/31 14:32, , 23F
03/31 14:32, 23F
→
03/31 14:33, , 24F
03/31 14:33, 24F
→
03/31 14:33, , 25F
03/31 14:33, 25F
→
03/31 14:34, , 26F
03/31 14:34, 26F
→
03/31 14:34, , 27F
03/31 14:34, 27F
→
03/31 14:35, , 28F
03/31 14:35, 28F
→
03/31 14:35, , 29F
03/31 14:35, 29F
→
03/31 14:36, , 30F
03/31 14:36, 30F
→
03/31 14:36, , 31F
03/31 14:36, 31F
→
03/31 14:38, , 32F
03/31 14:38, 32F
→
03/31 14:38, , 33F
03/31 14:38, 33F
推
03/31 23:58, , 34F
03/31 23:58, 34F
→
03/31 23:58, , 35F
03/31 23:58, 35F
→
04/01 08:58, , 36F
04/01 08:58, 36F
→
04/01 09:00, , 37F
04/01 09:00, 37F
→
04/01 12:02, , 38F
04/01 12:02, 38F
→
04/02 07:31, , 39F
04/02 07:31, 39F
→
04/02 11:20, , 40F
04/02 11:20, 40F
→
04/02 11:23, , 41F
04/02 11:23, 41F
→
04/02 17:19, , 42F
04/02 17:19, 42F
※ 編輯: Sunofgod (61.227.254.96), 04/18/2014 17:43:48
討論串 (同標題文章)