關於c語言的小問題

2022-12-31 17:25:10 字數 2149 閱讀 6852

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變數,設定一下就好了。就能輸出了。除了在所有函式之外定義的變數外,所有在函式中定義的變數都是區域性變數,它們只能在定義它們的函式中或板塊中才是可見的 是因為 主函...