(懸賞20分)以下C 程式執行的結果是什麼,為什麼?

2025-02-02 17:05:13 字數 2705 閱讀 7718

1樓:叫啥才行你說

第乙個程式錯誤處:getmemory()傳進去的是指標副本,要做出參要傳二級指標。所以str一直是null。對null指標的操作是非法的。

第二個程式錯誤處:由於p是區域性指標,返回區域性指標或引用會導致指標失效。指標的值會複製,但是指標本身出了函式範圍就析構掉了。

第三個符合:傳的是二級指標,所以指標可以帶值出來。這就是出參。

第四個輸出的是:world。雖然free了但是這個指標只是被清空,free還是要呼叫delete,delete後沒有立即指向null,所以free後的指標暫時可用,但是這種用法是不安全的。

記得呀。

2樓:網友

第乙個:因為子函式getmemory()沒有return語句,即子函式的p的值沒有傳遞給主函式的str,str仍然為null,故不能進行拷貝。

第二個:雖然有返回值,但子函式中定義的char p 是處在棧區的(malloc開闢的空間在堆區,需要自己用free釋放)子函式結束後,該空間就被釋放掉了。即str指向的空間沒有實際值。

第三個:雖然也沒有返回指,但函式呼叫時,是指標傳遞,子函式的p是str的位址,即*p就是str,它直接改變了str的值,完美的解決裡第乙個中的問題。所以是正確的。輸出為hello

第四個:雖然malloc開闢出的空間被釋放掉了,但str仍然指向這塊地方。輸出為world

3樓:網友

程式一:出錯原因應該是在棧區動態申請記憶體,無法追蹤其釋放過程。

程式四:記憶體釋放並不代表指標消亡,釋放後需要程式設計師自己置空str=null;

4樓:匿名使用者

第二題:陣列是個區域性變數,出了函式之後就自動釋放了,所以有問題。

第三題:雙重指標作為函式引數的典型應用就是把函式內分配的記憶體傳遞出去。

第四題:free之後的記憶體不更改再使用,那段**是錯誤的。這個是典型的錯誤使用指標的情況。

[c]執行下列程式後a的值為?b的值為?

5樓:亥元修計雁

inta=5,b=6,w=1,x=2,y=3,z=4;

a=w>x)&&b=y>z);

解釋:對於前面w>x是假的,所以a被賦值為0;但是對於整個邏輯式來說有乙個0那麼"與"的邏輯已經是0了,所以後面的表示式就不執行,所b的值還是6.

6樓:逄德覃癸

a=2b=1

c=1++a||+b

c相當於。a++;a||+b

c由於a++後值為2,表示式的值已經知道,一定為1,所以++b,++c不再計算,保留成原值。

7樓:融梅示緞

邏輯運算。a

b系列中,當。

a為false時,程式不再對。

b進行判斷了,也就是說b表示式不再執行!

那麼。a=w>x

則。a=0,那麼。

b=y>z就不再執行,則b=6原來的值。

記住vbscript中不是這樣的!兩個都要做判斷!

第九題,這個c程式的結果是什麼?

8樓:金色潛鳥

5 0 3

-按語法,程式要看成:

if (aa=b; b=t;

if(aa=c; c=t;

它不同於:if (aif (a

c語言,以下程式執行的結果是什麼,麻煩詳細解釋一下

9樓:

int main()

union b

int k;

char c[2];

a;;printf("%d,%d",,;

return 0;

解釋 :聯合體共用儲存空間。int型佔4個位元組,char型佔乙個位元組,因此a的記憶體分佈如下圖。

整型數-7的十六進位表示為0xfffffff9char[0] = 0xf9 //轉為十進位-7char[1] = 0xff //轉為十進位-1如果不理解進位轉換,只好去補一下基礎知識了。

10樓:亱風

f10除錯一下就清楚了。

下面程式執行的結果是【】(c 語言)

11樓:網友

main()

int i, j, m, n;

i=8 ;j=10;

m=++i;n=j++;

printf("%d,%d,%d,%d",,i,j,m,n);

/分析:首先要清楚i++和++i的區別:i++的意思是先使用i的值,然後在對i進行+1操作,例如a=i++,意思相當於a=i;和i++兩個語句(順序不能顛倒),而a=++i,意思則相當於i++;和a=i;(順序也不能顛倒)。

所以m=++i;就相當於i++;和m=i兩條語句;i剛開始等於8,所以i++之後i=9,然後m=i;所以m=9;而n=j++;相當於n=j;和j++;兩條語句,j剛開始等於10,所以n=j;n=10,然後j++;所以j=11。

綜上:i=9,j=11,m=9,n=10.

其實對於i++和++i很好記憶,++在前就是先++操作在使用i,++在後就是先使用i再++操作。

12樓:網友

9,11,9,10

拜託你程式寫規範,main前好歹加個void 或者intn++表示先取n值,n再自加1

n表示先自加1再去n值。

c語言以下程式執行後輸出結果為

由於default放在前面,所以在執行完default之後需要執行到第一個break才會結束。i 5 n 10 n 10 n 10i 4 n 10 n 100 i 3 n 10 n 10 n 100i 2 n 10 n 1000 i 1 n 0 n 10 n 1000i 0結束。結果n 1000 i...

以下程式的執行結果是inta0,b3,c

首先抄f函式中的c是一個靜態變數,生命週期是全域性的,這裡c的3是以初值形式賦予的,所以只有第一次執行f 的時候賦為3,所以執行迴圈的時候 i 0時,a 2,先取值後 f 2 a 3 f函式內a c 先取值後 a 3 這個a的作用於在函式f內,不影響外部的a c 4,最後的a被return給k k ...

71以下程式的執行結果是,71以下程式的執行結果是

n 的初始字元為 c 由於 switch 語句中是 switch n 故先執行完 switch 語句之後,n 的值才增加 1,即 n 的值為 d 因此,該程式的輸出結果應該為 pass 72.以下程式的執行結果是 這到題選d,因為字元優先順序,先執行比較語句,才執行 執行了2次 所以從5變7 以下程...