程式語言 96交通升資 - 考試
By Isabella
at 2014-03-31T00:02
at 2014-03-31T00:02
Table of Contents
此篇觀念為錯誤觀念 請勿參考
※ 引述《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就是印出多少 相同的道理
有錯麻煩指正...我是自己看書沒人可以問是不是這樣思考是正解...
--
※ 引述《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就是印出多少 相同的道理
有錯麻煩指正...我是自己看書沒人可以問是不是這樣思考是正解...
--
Tags:
考試
All Comments
By Margaret
at 2014-04-04T22:24
at 2014-04-04T22:24
By Isla
at 2014-04-07T20:21
at 2014-04-07T20:21
By Andy
at 2014-04-08T21:15
at 2014-04-08T21:15
By Madame
at 2014-04-11T21:13
at 2014-04-11T21:13
By Donna
at 2014-04-15T18:00
at 2014-04-15T18:00
By Michael
at 2014-04-19T22:49
at 2014-04-19T22:49
By Elma
at 2014-04-20T18:47
at 2014-04-20T18:47
By Carol
at 2014-04-25T07:14
at 2014-04-25T07:14
By Agatha
at 2014-04-25T20:06
at 2014-04-25T20:06
By Delia
at 2014-04-30T14:51
at 2014-04-30T14:51
By Erin
at 2014-04-30T23:50
at 2014-04-30T23:50
By Megan
at 2014-05-01T23:52
at 2014-05-01T23:52
By Lucy
at 2014-05-05T06:41
at 2014-05-05T06:41
By Faithe
at 2014-05-05T19:09
at 2014-05-05T19:09
By Wallis
at 2014-05-05T20:15
at 2014-05-05T20:15
By Thomas
at 2014-05-08T21:33
at 2014-05-08T21:33
By James
at 2014-05-12T14:41
at 2014-05-12T14:41
By Charlie
at 2014-05-15T02:50
at 2014-05-15T02:50
By Odelette
at 2014-05-17T22:44
at 2014-05-17T22:44
By Oliver
at 2014-05-18T02:04
at 2014-05-18T02:04
By Sandy
at 2014-05-22T17:46
at 2014-05-22T17:46
By Connor
at 2014-05-25T03:11
at 2014-05-25T03:11
By Lydia
at 2014-05-28T21:46
at 2014-05-28T21:46
By Xanthe
at 2014-06-01T05:11
at 2014-06-01T05:11
By Enid
at 2014-06-03T14:32
at 2014-06-03T14:32
By Elvira
at 2014-06-06T07:46
at 2014-06-06T07:46
By Faithe
at 2014-06-08T03:31
at 2014-06-08T03:31
By Genevieve
at 2014-06-12T09:00
at 2014-06-12T09:00
By Edith
at 2014-06-13T17:49
at 2014-06-13T17:49
By Cara
at 2014-06-18T06:02
at 2014-06-18T06:02
By Ida
at 2014-06-18T22:34
at 2014-06-18T22:34
By Rebecca
at 2014-06-21T06:15
at 2014-06-21T06:15
Related Posts
程式語言 96交通升資
By Kumar
at 2014-03-30T23:34
at 2014-03-30T23:34
台中大東海法緒許老師共預計上幾堂?
By Audriana
at 2014-03-30T23:16
at 2014-03-30T23:16
五月關島考試
By Madame
at 2014-03-30T21:32
at 2014-03-30T21:32
民訴家事事件法
By Kyle
at 2014-03-30T19:25
at 2014-03-30T19:25
行政罰法問題
By Xanthe
at 2014-03-30T18:06
at 2014-03-30T18:06