1. 程式人生 > >形參改變實參的值不變(C語言基礎知識加例題講解)

形參改變實參的值不變(C語言基礎知識加例題講解)

#include <stdio.h> 
fun(int x,int y) 
{ 
static int m=0,i=2; 
i+=m+1;m=i+x+y;return m;
}
main()
{ 
int j=1,m=1,k; 
k=fun(j,m);printf("%d,",k); 
k=fun(j,m);printf("%d\n",k);
} 
執行後的輸出結果是(  )。
511

55

1111

115

正確答案:A
答疑:【解析】宣告靜態區域性變數:函式呼叫結束後,其佔用的儲存單元不釋放,在下次該函式呼叫時,該變數保留上一次函式呼叫結束時的值。本題子函式fun
中的變數 i和m均為靜態區域性變數。所以第一次呼叫fun函式,返回m的值為5,第二次再呼叫fun函式時,i的值為3,m的值已經是5了,所以執行i+=m+1,i的值變為9,m=i+x+y=91111

說明了,為什麼C中能夠說形參的值改變,不影響實參的值,在程式執行的過程中,身為形參的靜態區域性變數m的值隨著程式的執行在一直的改變,但是實參的m值卻是一直的沒有改變一直是m=1;即形參的值改變不影響實參的值,不是為了說明,形參的值改變,呼叫函式進行計算出來的值不變,而是為了說明,形參和實參同名的情況下,改變形參的值實參的值不變。

34在C語言中,只有在使用時才佔用記憶體單元的變數,其儲存型別是(  )。
auto
static externregister autoregister staticregister 正確答案:C 答疑:【解析】auto:函式中的區域性變數,動態地分配儲存空間,資料儲存在動態儲存區中,在呼叫該函式時系統會給它們分配儲存空間,在函式呼叫結束時就自動釋放這些儲存空間。 register:為了提高效率,C語言允許將區域性變數的值放在CPU中的暫存器中,這種變數叫"暫存器變數",只有區域性自動變數和形式引數可以作為暫存器變數。 extern:外部變數(即全域性變數)是在函式的外部定義的,它的作用域為從變數定義處開始,到本程式檔案的末尾。如果外部變數不在檔案的開頭定義,其有效的作用範圍只限於定義處到檔案終了。 static
:靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元。在程式整個執行期間都不釋放。