1樓:隨便
因該是這樣的。
#include
int a=2;//定義乙個全域性變數。
a=2int f ( int *a)
return (*a)++因為是後加,所以先將傳過來的a位址中的值返回後,再將這個值加一。
int main( )
int s=0;
int a=5;//這裡定義乙個區域性變數,作用域是在這個大括號。
中。s+=f ( a );這裡傳入f的是a=5的變數的位址,經過f後s=s+5,所以s = 5
這裡過後a=5這個變數的作用域結束 ,經過這以後s=5s+=f ( a );這裡傳的是a=2這個全域性變數的值的位址 ,這時f反回的值是2,所以s =s+2,s=7
printf ( n%d ",s );
return 0;
如果 f 函式改成這樣,答案才是9
int f ( int *a)
return ++a);
2樓:網友
int f (int *a)是乙個定義乙個函式,第乙個int是函式的返回值的型別,第二個是傳遞引數的型別。
花括號裡面是函式體,就是返回所傳位址裡的值+1
int a=1;int f(int c){static int a=2;c=c+1;return(a++)+c;}main(){int i,k=0;
3樓:網友
首先要明確變數的作用域,以及static函式的意義。
int a=1; a是全域性變數,其作用域為其之後的所有函式,但若函式中又宣告瞭a變數,則全域性變數不再起作用。
static int a=2; a是靜態變數,該變數作用域為f函式,且對其修改都將儲存, 所以在f函式內全域性變數a不起作用。
int a=3, a是區域性變數, 其作用域僅為for模組內,for執行完後,區域性變數a不再有效,所以在main函式中f(a)呼叫時是用的區域性變數a,但for後面的k+=a;則是全域性變數a
這樣就可以理解了。
i=0; 進入for內部語句, k += f(3)所以 k = 0+f(3) = 0+ (a++ c + 1) = 2+ 3+1 =6
執行完這個後,靜態變數a自加,所以a = 3
i=1; 進入for內部語句, k+=f(3), k = 6+f(3) = 6+ (a++ c + 1) = 6 + 3 + 3 +1) = 13
執行完這個後,靜態變數a自加,所以a = 4
i=2,不再進入for內部。
執行k+=a;此處的a為全域性變數a,所以 k += 1, k =14輸出。
if(n%2){static int a=4;t+=a++;} return t+a++ int a=
4樓:網友
如果n為奇數,則if條件句內的部分執行。
那麼t 賦值為 t + 4++)也就是t+4,由於這個int a的宣告在if條件句內,所以這個a與外面的a是互補干擾的,此部分的結果是,。return t+5++(int a的宣告在前面吧,此後外面的a變成了6,if內部的a變成了5)。也就是t+9.(n為奇數)
n為偶數則返回值為t+5 了。。。
字尾自增操作的內容是先返回其數值,再增加,結果沒有增加1的效果。
字首自增則是先增加1,然後返回其值到計算式中,結果中有增加1的。