C++筆試題1

1.在32位機器中,如下代碼的輸出是:

void example(char acWelcome[]){
    printf("%d",sizeof(acWelcome));
    return;
}
void main(){
    char acWelcome[]="Welcome to Huawei Test";
    example(acWelcome);
    return;
}

A.0
B.4
C.23
D.24
答:因爲這裏是用數組名(即指針)作爲參數來傳遞的,指針的大小在32位機上是4字節,在64位機器上是8字節,所以這裏acWelcome是作爲指針來傳遞的,是4個字節。因爲在C++中,當數組作爲函數的參數進行傳遞時,數組就自動退化爲指針,所以在函數中 sizeof(acWelcome)是求函數指針的大小,而不是數組的大小。 應該爲4


2.在32位操作系統gcc編譯器環境下,下面程序的運行結果爲()

#include <iostream>
using namespace std;
class A 
{
public:
    int b;
    char c;
    virtual void print() 
    {
        cout << "this is father’s fuction! " << endl;
    }
};
class B: A 
{
public:
    virtual void print() 
    {
        cout << "this is children’s fuction! " << endl;
    }
};
{
    cout << sizeof(A) << "" << sizeof(B) << endl;
    return 0;
}

A.12 12
B.8 8
C.9 9
D.12 16

答案:選A
答案解析:類的大小隻與成員變量(非static數據成員變量)和虛函數指針有關,還要考慮到對齊.
那麼類A的大小等於4個字節 + 4個字節(考慮對齊) + 4個字節(指向虛函數的指針,因爲是32爲操作系統)=12字節;
類B的大小就是等於類A的大小12個字節.
因爲在基類中存在虛函數時,派生類會繼承基類的虛函數,因此派生類中不再增加虛函數的存儲空間(因爲所有的虛函數共享一塊內存區域),而僅僅需要考慮派生類中添加進來的非static數據成員的內存空間大小。所以類B大小爲12B


3.下面這個程序執行後會有什麼錯誤或者效果:

#define MAX 255
int main()
{
     unsigned char A[MAX], i;
     for (i = 0; i <= MAX; i++)
         A[i] = i;
}

A.數組越界
B.死循環
C.棧溢出
D.內存泄露

答:死循環加數組越界訪問(C/C++不進行數組越界檢查)
MAX=255
數組A的下標範圍爲:0..MAX-1,這是其一..
其二.當i循環到255時,循環內執行:
A[255]=255;
這句本身沒有問題..但是返回for (i=0;i<=MAX;i++)語句時,
由於unsigned char的取值範圍在(0..255),i++以後i又爲0了..無限循環下去.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章