關於c 筆試題,記憶體部分,問3個C 筆試題目

時間 2022-11-30 23:01:31

1樓:竹林傾聽雨

第乙個:char *str = null;此時str是乙個區域性變數,裡面存的是乙個指標,

傳值時,將這個str的副本傳給函式,當函式執行完返回時,函式內部的p是區域性變數,返回時就被銷毀,str的值依然是null。所以strcpy(str, "hello world");會出錯。

第二個:p【】是個區域性變數,當出了這個函式就被釋放,而整個陣列都是分配在棧上,所以整個陣列都被釋放了,所以返回的位址已經沒有用了,如果改成*p就可以了,因為*p把資料分配到堆記憶體上了。p釋放了,而堆上的資料沒有釋放,所以可以。

第三個:就是針對第乙個的修改, 此時str是乙個區域性變數,裡面存的是乙個指標,傳值時,將這個str的位址的副本傳給函式,當函式執行完返回時,函式內部的*p是區域性變數,其值為str的位址,返回時就被銷毀,但str的值已經改變了,str的值指向了堆中一塊已分配記憶體

第四個:前半部分是對的,但釋放後,在賦值就可能會出問題(不一定,是因為,被釋放的記憶體可能已經分配給別的,或剛賦值完就被覆蓋掉了)。

2樓:匿名使用者

#include

#include

#include

/*void getmemory(char *p) //僅僅在函式體內改變了p的指向 而沒有傳回

void test(void)

*//////////////////////char *getmemory(void) //通過函式返回乙個位址void test(void)

////////////////////

void getmemory(char **p, int num) //通過形參返回記憶體

void test(void)

////////////////////////void test(void)}/*

void main()*/

3樓:匿名使用者

1,2錯的, 3是對的, 4是錯的但是很可能還是能執行出正確結果的

4樓:

參考 林銳的 高質量c++程式設計

問3個c++筆試題目

5樓:

說說我的看法:

b正確。c,呼叫時分配

也是系統分配,不是程式設計師用**分配;d,相容就版是相配的權意思,相配並不一定要相同,就當是「可以」來理解吧。所以本題無歧意。

我認為d才是正確答案。難道呼叫過載函式時能把與a函式的形參型別和個數對應相同的b函式當作被調函式嗎?顯然錯誤。所以函式名是必須選擇的依據。

在下認為c正確。d返回型別是int,有幾個三角形的面積是int的?

6樓:匿名使用者

第一題,來題目中已經說了源「呼叫函式時」,和你想的一樣。這裡的相容應該是可以隱式轉換的意思吧。

第二題,不存在你說的那種重灌函式,可以想象一下,系統如何只通過返回值呼叫不同函式?

第三題,看上去應該選c吧,d的返回值是int丟失精度了,還算神馬。

隨便說說,錯了不管換。

幾道c++筆試題目

7樓:走出憧憬

第一題:a 陣列在宣告的時候大小必須是固定的,但是在a裡面n是乙個變數。

第二題:1.null 2.to-- 去掉結束符 3.*to++ 4.s1,s2因為s1長度大於s2

第三題:

1)const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,並且在字元替換可能會產生意料不到的錯誤(邊際效應)。

(2)有些整合化的除錯工具可以對const常量進行除錯,但是不能對巨集常量進行除錯。

第四題:

乙個識別符號的作用域通俗的說就是指這個識別符號在那個範圍內可以被使用了。

但我只知道四種識別符號作用域:

檔案作用域:如果宣告識別符號的地方位於任何語句塊和引數列表之外,那麼此識別符號就擁有檔案作用域。可以在宣告後的任何地方(且在翻譯單元結束之前)使用此識別符號,其實就是像是宣告在main函式前面的全域性變數一樣

語句塊作用域:在語句塊內宣告的識別符號具有語句塊作用域,但標籤是例外。這樣的識別符號只能出現在從「宣告處」到「包含此宣告的最小語句塊的結尾」。

比如用大括弧括著的變數

函式原型作用域:函式原型內的引數名稱具有函式原型作用域。這些引數名稱在原型外面不重要,所以它們只有注釋的意義。

函式作用域:個標籤的作用域一定在該標籤所處的函式體內,即使它被放在巢狀的語句塊內也是一樣。換句話說,可以使用goto語句,從任意點跳到同乙個函式內的某個標籤處

8樓:

和樓主一同等待答案。

#define貌似就是做個替換,好像必須在頭部定義。const可以在任何地方定義。

第一題a錯了。當時看的好像是陣列必須用確切的不可改變的數值來定義長度。如果不把n定義為常量,陣列長度就不能確定。

9樓:

在下面的語句中錯誤的是 。

a、int n=5; int y[n]

b、const int n=5; int y[n]c、in n=5; int *py=new int[n];

d、const int n=5; int *py=new int[n]

選a,int y[n],n必須是const int而這裡是int ,所以是不行的!

#define a number是說所有的a解釋為number,也就是把所有的a用number換掉,所以不用指定a 的型別,事實上a 也不是變數!

const int a=4;

這個是說定義乙個常量a,a=4,這裡a 是乙個變數,但const說明不准改變a的值。

10樓:匿名使用者

const可為成員。

括號,大括號,類中的,檔案裡的,全域性的。我只會用,不會概念。

11樓:高菀魚陽陽

1,=!在c++語法上是沒有錯誤的,但語義上是有錯誤的(或者說編譯器無法識別,編譯器也是人寫的,人寫的時候在語義定義了!=,但沒定義=!,語法上=!確實可以的)

2,我不知道你用的是什麼編譯器,反正我用的編譯器,算出來的a=153,++i||++j&&++k;第乙個值++i為1並且第乙個符號為||,編譯器在運算的時候為了節省時間,只計算++i(因為只掃瞄到++i||

便可計算出整個式子的值,不管後面是0或者1,整個式子都為1)如有不懂,請hi我

,純手打,請給分,謝謝!

c++考試題,急啊!!!!!!!!!!!!!!!!!!!!!!!!!!!! 20

12樓:匿名使用者

class rect

rect(int w, int h) : mw(w), mh(h) {}

int getzc()

int getmj()

protected:

int mw;

int mh;

};void main()

經典面試題:c++有什麼好的方法可以防止記憶體洩露

13樓:sc黑色茉莉

記得可以自己設計智慧型指標,它會自動**。

c++類得記憶體分配問題,面試的時候把我問倒了。

14樓:

在c++物件模型,非靜態資料成員是影響佔據記憶體大小的主要因素,所有例項共享乙份靜態資料,靜態/非靜態成員函式都不會影響例項記憶體的大小(是由實現固定的),若包含虛函式會佔4位元組無論有多少虛函。

所以,類例項的記憶體布局中只包含「成員資料」,並且只有用「虛函式」時(vptr)才會對記憶體布局有一丁點影響。

派生類在例項化時首先構造乙個父類例項,在派生類銷毀之後銷毀。

子類b父類資料成員

}子類資料成員}

15樓:匿名使用者

c++中先建立父類,在建立子類。其中父類空間在子類的開始位置。

16樓:匿名使用者

就是樓上說的這樣。。

17樓:匿名使用者

每個類成員乙個空間,就沒啥好畫的了

幾道C 筆試題目

第一題 a 陣列在宣告的時候大小必須是固定的,但是在a裡面n是乙個變數。第二題 1.null 2.to 去掉結束符 3.to 4.s1,s2因為s1長度大於s2 第三題 1 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安全檢查。而對後者只進行字元替換,沒有型別安全檢查,...

資料結構筆試題,資料結構(C 語言版)筆試試題與答案

a 22,3,30,4,60,11,58,18,40,16 low 0 high 9 a 11,3,16,4,18,22,58,60,40,30 low 0 high 4 a 4,3,11,16,18,22,58,60,40,30 low 3 high 4 a 4,3,11,16,18,22,58,...