1樓:腐爛生存
不好意思,開始的時候看花眼了
157.該提輸出值不確定,因為c++中規定,新宣告的變數如果沒有付初值則該變數的預設值將隨機出現。如果在s->i[0]=0x39以前,先s->k=0,則將輸出14393.
聯合體的所佔記憶體的大小等於其內所佔記憶體最多的成員,因此,這個聯合體的長度是4個位元組。而k,i[0],i[1]共享這四個位元組,其中i[0]為低八位,i[1]為次低八位,k佔所有的四位。如果有s->k=0時記憶體空間中內容的二進位制表示為32個0,而0x39=00111001,0x38=00111000,因此賦值後記憶體中的二進位制表現是
00000000000000000011100100111000=十進位制的14393
107.改程式考察三個知識點,第一個是,為函式傳遞引數的兩種方式,傳值和傳地址的區別(還有一種是傳引用,此處沒考)。第二個是static修飾符的性質。第三個是++運算子的使用。
傳值呼叫時函式在函式體中對形參的賦值不會改變實參的值,舉個例子
fun(int i)
main採用如下方式呼叫
main()
fun(n)執行後,main中n的值依舊為0
傳地址呼叫會將地址傳送給函式,對形參的改變會導致實參的值發生變化。比如:
fun(int *i)
main中採用上面相同的呼叫方式呼叫函式fun(n)後,n的值變為1。
函式中static修飾的變數宣告語句只在第一次執行到該語句的時候有效,其他時間被忽略,函式結束後,對static修飾的變數所進行的修改值保留。
++運算子當放置在變數之前的時候表示先增值在引用,比如
int i=5;
int b=0;
b=++i;
則先i=i+1,然後b=i,即b=6
當++放置在變數後面時表示先引用在增值。比如
int i=5;
int b=0;
b=i++;
則先b=i,然後i=i+1,即b=5
當fun(fun(i,&j),&j)被呼叫的時候,首先括號內的fun(i,&j)先被執行,進入fun函式中後,形參a=1,b為j的地址,*b=2,static int m=2第一次執行,因此該語句有效,此時m=2。i+=m+a,即i=3,m=++(*b),首先*b=*b+1,然後m=*b,因此m=3,注意這裡由於b的地址指向實參j的地址,因此實參j的值變為2,fun函式返回,返回值為3。回到main呼叫外層的fun函式又進入fun函式體,當執行到static int m=2時,由於前面已經呼叫過一次該語句,因此該語句被忽略,此時m為上一次執行後的結果,即m=3.
形參a=3,b為j的地址,此時的值為2,執行i+=m+a,結果為6,m=++(*b)後結果為4,*b結果為4.
這裡還隱藏著一個知識點,即++和*兩個運算子的先後問題,例如:
int a=10;
int *b=a;
int c1=0,c2=0;
c1=++(*b);
c2=*(++b);
執行結果c1=11,那麼c2等於多少呢?c2將為一個隨機的數值,++b以後,b所指向的記憶體不再是a的地址,因此使用*求值會得到一個隨機的值
44.語法上都沒有錯誤。但c選項引用方式會報錯,原因是m[0]=5,而陣列m合法下標為0,1,2,3,4,因此m[m[0]]=m[5],下標溢位
2樓:
暈,學了一學期c
竟還是看不懂你的題
union 公用體 老師說不考 s -> i[0] = 0x39 這個沒看懂
fun ( fun (i, &j ), &j );函式前怎麼沒宣告啊,還巢狀呼叫,i在fun函式中怎麼沒有初始值呢,i的作用域只在main函式。
3樓:管筠
s -> i[0] = 0x39; s -> i[1] = 0x38; printf ( " %x \n ", s -> k ) ;
0x39是十六進位制輸出3*16+9=57
i是全域性變數!i的初值在main中初始的在fun中也是1(最先)。
c中m[0]=5,則m[m[0]]即m[5],因為m的長度是5,所以m【】是從0開始的,所以m最大是4,
d中m[i]中i=4則m[i]=m[4]=1,所以m[m[i]]=m[1]=5是正確的引用
4樓:匿名使用者
自己在電腦執行一下試試吧 一下子也說不明白的
關於c語言小問題,關於C語言一個小問題
if語句不能這樣用,當需要判斷多個條件時,需要各自用括號括起來,再用邏輯與符號 或者邏輯或符 連線。貼段 給你參考,功能是a,b,c三者相等時輸出case 1,我用gcc編譯器驗證過了。include int main void else printf n n return 0 c語言一個小問題。如...
有關C語言的小問題,關於C語言的幾個小問題
line 69 函式showarr,parr是指向結構體的指標,你這裡要訪問的應該是它的成員陣列parr pbase void showarr struct arr parr ps1 這個問題在編譯階段通常會有警告的,因為printf格式符 d是整數,你給的parr i 跟它是不匹配的,會引起 fo...
關於c語言程式設計的小問題,關於C語言程式設計的一個小問題
x為show函式中的區域性變數,不能在main函式中被訪問。include int show int main 說白了就是主函式沒有設定x變數,設定一下就好了。就能輸出了。除了在所有函式之外定義的變數外,所有在函式中定義的變數都是區域性變數,它們只能在定義它們的函式中或板塊中才是可見的 是因為 主函...