-
您在這裡對 sun1 進行了兩次呼叫,靜態 i 作為整數是第乙個。
二、第三......呼叫子過程時,i 值不會更改為初始值 0 並繼續執行。
首先,call(x,x,z),x 傳遞給 a,a=1,以同樣的方式傳遞給 a,a=3,i=1+3+0=4,a=3*3+4=13,b=10,c=24。 因為 call(x,x,z), a=b,即有乙個隱式執行語句 a=b=10,所以最後一行列印 10 10 24。
call(x,y,y) 後,因為是按位址傳遞的,x=10,y=2,即 a=10,b=2,c=2。 因為是靜態的,i 仍然等於 4,並且初始值 0 沒有被賦值,i = 10 + 2 + 4 = 16,a = 22,b = 20,c = 58(同樣,隱式 b = c = 58),所以最後一行列印 22 58 58。 由於值傳遞,x=22,y=58,z=24,即第三行列印 22 58 24
-
重點放在靜態變數上。 (靜態變數,執行程序後不會清除變數的值,下次呼叫時上次儲存的變數的值不會重新初始化為 0)。
記住這一點後,在做這個問題的時候,需要單獨記錄靜態變數的值,在執行一行的時候更新一次。
作為我的標題:
第一次執行sun1(1,1,3),i=0,執行i=a+c+i=1+3+0=4,i=4記錄在紙上
第二次執行sun1(1,2,2),i=4,執行i=a+c+i=1+2+4=7,i=7記錄在紙上
-
第一次呼叫 sun1(x,x,z),x=1; x=1;z=3 帶來 a、b、c,即 a=1; b=1;c=3;
函式開始計算:
靜態 i 初始化,i=0;
i=a+c+i=1+3+0=4;
a=3*c+i=3*3+4=13;返回引數 x,即 x=13;sun1(13,x,z)
b=2*c+i=2*3+4=10;返回引數 x,即 x=10;sun1(10,10,z) ps:由於 x 使用相同的位址來儲存值,因此 y 的值應該相同,這裡 x 的值被賦值為 10,所以兩個 x 引數變為 10
c=a+b+i=10+10+4=24;返回引數 x,即 z=24;sun1(10,10,24)
列印輸出 A、B 和 C 是輸出"10 10 24";
第二個呼叫 sun1(x,y,y), x=10; y=2;y=2 帶來 a、b、c,即 a=10、b=2、c=2
由於靜態 i 是靜態變數,系統為 i 分配乙個記憶體儲存位址,該位址儲存上次呼叫 sun1() 分配給 i 的值,即 i=4;
函式開始計算:
i=a+c+i=10+2+4=16;
a=3*c+i=3*2+16=22;返回引數 x,即 x=22;sun1(22,y,y)
b=2*c+i=2*2+16=20;回到實數引數 y,即 y=20;sun1(22,20,y)
c=a+b+i=22+20+16=58;回到實數引數 y,即 y=58;sun1(22,58,58) ps:由於 y 使用的值儲存在同一位址中,因此 y 的值應該相同,並且 y 的值被賦值為 58,因此兩個 y 引數變為 58
列印輸出 A、B 和 C 是輸出"22 58 58";
-
這種題目不是解題解題,而是需要從頭開始,努力學習!
那麼多朋友的解釋,無非就是書裡的內容!
-
看看VB的基本書籍你就會明白,簡單的解釋是沒有用的。
隨著汽車數量的增加,路況變得更加複雜。 很容易誤撞別人的車,有時很難分辨。 特別是對於一些專門研究瓷器的人來說,事情會變得更加複雜。 >>>More
其實,運氣也是一種力量。 他可以偷懶,什麼都不知道,這是他的運氣,但能找到乙份工作是他的運氣,但是如果他真正工作的時候無事可做,而且他也非常懶惰,不願意學習,那其實是很危險的。 <>