c 筆試題彙總 2

2021-04-19 20:40:26 字數 3132 閱讀 2572

1. 以下三條輸出語句分別輸出什麼?

char str1 = "abc";

char str2 = "abc";

const char str3 = "abc";

const char str4 = "abc";

const char* str5 = "abc";

const char* str6 = "abc";

cout <

<<( str1==str2 ) <

cout <

<<(>  cout <

答:分別輸出false,false,true。str1和str2都是字元陣列,每個都有其自己的儲存區,它們的值則是各儲存區首位址,不等;str3和str4同上,只是按const語義,它們所指向的資料區不能修改。str5和str6並非陣列而是字元指標,並不分配儲存區,其後的「abc」以常量形式存於靜態資料區,而它們自己僅是指向該區首位址的指標,相等。

2. 以下**中的兩個sizeof用法有問題嗎?

void uppercase( char str ) // 將 str 中的小寫字母轉換成大寫字母

char str = "abcde";

cout <<"str字元長度為: " <

<

uppercase( str );

cout <

<

答:函式內的sizeof有問題。根據語法,sizeof如用於陣列,只能測出靜態陣列的大小,無法檢測動態分配的或外部陣列大小。函式外的str是乙個靜態定義的陣列,因此其大小為6,函式內的str實際只是乙個指向字串的指標,沒有任何額外的與陣列相關的資訊,因此sizeof作用於上只將其當指標看,乙個指標為4個位元組,因此返回4。

3. 非c++內建型別 a 和 b,在哪幾種情況下b能隱式轉化為a?

答:

a. class b : public a // b公有繼承自a,可以是間接繼承的

b. class b // b實現了隱式轉化為a的轉化

c. class a // a實現了non-explicit的引數為b(可以有其他帶預設值的引數)建構函式

d. a& operator= ( const a& ); // 賦值操作,雖不是正宗的隱式型別轉換,但也可以勉強算乙個

4. 以下**有什麼問題?

struct test

test() {}

void fun() {}

};

void main( void )

答:變數b定義出錯。按預設建構函式定義物件,不需要加括號。

5. 以下**有什麼問題?

cout <<(true?1:"1") <

答:三元表示式「?:」問號後面的兩個運算元必須為同一型別。

6. 以下**能夠編譯通過嗎,為什麼?

unsigned int const size1 = 2;

char str1[ size1 ];

unsigned int temp = 0;

cin >>temp;

unsigned int const size2 = temp;

char str2[ size2 ];

答:str2定義出錯,size2非編譯器期間常量,而陣列定義要求長度必須為編譯期常量。

7. 以下反向遍歷array陣列的方法有什麼錯誤?

vector array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 3 );

for( vector::size_type i=array.size()-1; i>=0; --i ) // 反向遍歷array陣列

答:首先陣列定義有誤,應加上型別引數:vector

8. 以下**中的輸出語句輸出0嗎,為什麼?

struct cls

cls()

};

cls obj;

cout <

<

答:不能。在預設建構函式內部再呼叫帶參的建構函式屬使用者行為而非編譯器行為,亦即僅執行函式呼叫,而不會執行其後的初始化表示式。只有在生成物件時,初始化表示式才會隨相應的建構函式一起呼叫。

9. c++中的空類,預設產生哪些類成員函式?

答:

class empty

;

10. 以下兩條輸出語句分別輸出什麼?

float a = 1.0f;

cout <<(int)a <

cout <<(int&)a <

cout <

float b = 0.0f;

cout <<(int)b <

cout <<(int&)b <

cout <

答:分別輸出false和true。注意轉換的應用。(int)a實際上是以浮點數a為引數構造了乙個整型數,該整數的值是1,(int&)a則是告訴編譯器將a當作整數看(並沒有做任何實質上的轉換)。因為1以整數形式存放和以浮點形式存放其記憶體資料是不一樣的,因此兩者不等。對b的兩種轉換意義同上,但是0的整數形式和浮點形式其記憶體資料是一樣的,因此在這種特殊情形下,兩者相等(僅僅在數值意義上)。

注意,程式的輸出會顯示(int&)a=1065353216,這個值是怎麼來的呢?前面已經說了,1以浮點數形式存放在記憶體中,按ieee754規定,其內容為0x0000803f(已考慮位元組反序)。這也就是a這個變數所佔據的記憶體單元的值。當(int&)a出現時,它相當於告訴它的上下文:「把這塊位址當做整數看待!不要管它原來是什麼。」這樣,內容0x0000803f按整數解釋,其值正好就是1065353216(十進位制數)。

通過檢視彙編**可以證實「(int)a相當於重新構造了乙個值等於a的整型數」之說,而(int&)的作用則僅僅是表達了乙個型別資訊,意義在於為cout<

《及==選擇正確的過載版本。>

11. 以下**有什麼問題?

typedef vector intarray;

intarray array;

推薦投訴

本文**

筆試題彙總

對於t n a t n b c n k t 1 c 這樣的遞迴關係,有這樣的結論 if a b k t n o n logb a logb a b為底a的對數 if a b k t n o n k logn if a b k t n o n k a 25 b 5 k 2 a b k 故t n o n...

微軟筆試題 彙總

1.臨界變數critical section的概念 還有semaphore,thread類似的這些 程序進入臨界區的排程原則是 如果有若干程序要求進入空閒的臨界區,一次僅允許乙個程序進入。任何時候,處於臨界區內的程序不可多於乙個。如已有程序進入自己的臨界區,則其它所有試圖進入臨界區的程序必須等待。進...

python筆試題彙總

1 什麼是lambda函式?它有什麼好處?lambda作為乙個表示式,定義了乙個匿名函式。lambda和普通的函式相比,就是省去了函式名稱而已,同時這樣的匿名函式,又不能共享在別的地方呼叫。2 介紹一下except的用法和作用 try except語句用來檢測try語句塊中的錯誤,從而讓except...