1. 程式人生 > >近期刷題知識點

近期刷題知識點

1.一個C語言程式是由()。

正確答案: B  

函式組成

  1. 在16位C編譯系統上,下列程式執行後的輸出結果是()。

void main()

{int a=-32769;printf("%8U\n",a);}

8U:

格式字元必須小寫,題中的”%8U”不會當作格式控制符,而是原樣輸出,變

量a將沒有對應的格式說明,也不會輸出

C語言中%d,%o,%f,%e,%x的意義

格式說明由“%”和格式字元組成,如%d%f等。它的作用是將輸出的資料轉換為指定的格式輸出。格式說明總是由“%”字元開始的。不同型別的資料用不同的格式字元。 
格式字元有d,o,x,u,c,s,f,e,g等。 

%d整型輸出,%ld長整型輸出,

%o以八進位制數形式輸出整數,

%x以十六進位制數形式輸出整數,

%u以十進位制數輸出unsigned型資料(無符號數)。

%c用來輸出一個字元,

%s用來輸出一個字串,

%f用來輸出實數,以小數形式輸出,

%e以指數形式輸出實數,

%g根據大小自動選f格式或e格式,且不輸出無意義的零。

scanf(控制字元,地址列表) 
格式字元的含義同printf函式,地址列表是由若干個地址組成的表列,可以是變數的地址,或字串的首地址。如scanf("%d%c%s",&a,&b,str);

注意:

scanf輸入double時只接受le或lf,不接受f

程式執行的時候,靜態成員已經載入在記憶體裡面了,但是包含靜態成員的物件共享這些靜態成員
比方說,A有一個靜態成員public static int i;那麼程式執行的時候,這個i就載入進記憶體了,A的所有物件的i變數都指向這個靜態空間的i,也就是說建立物件之前,它就佔空間了

void func(char *p)

{

    p=p+1;

}

int main()

{

    char s[]={'1','2','3','4'};

    func(s);

    printf("%c",*s);

    return 0;

}

以下程式執行後的輸出結果為()

1:

p是一個指標,s也是一個指標,指標傳指標,還是相當於值傳遞,函式呼叫時將s的內容(即字元'1'的地址)拷貝給p,p+1不會對s產生任何影響

使用物件名呼叫虛擬函式,是靜態聯編;

使用基類指標呼叫虛擬函式,是動態聯編;

註釋:include   ""是先從本地目錄開始尋找,然後去尋找系統路徑,而Include   <>   相反先從系統目錄,後從本地目錄,

typedef struct list_t{

struct list_t *next;

struct list_t *prev;

char data[0];

}list_t;

請問在32位系統中,sizeof(list_t)的值為? 8

在用作定義時char[0]是空陣列,是不佔空間的。如果定義char[1],那麼就是長度為1的陣列,使用char[0]則表示這唯一的資料,注意差別啦

在C++,下列哪一個可以做為物件繼承之間的轉換

dynamic_cast

reinterpret_cast:一個指標轉化為其他型別的指標時,不做型別檢測,操作結果是一個指標指向另一個指標的值的二進位制拷貝;

static_cast:允許執行隱式轉換和相反的轉換操作,父類轉換為子類是強制轉換Son *son=static_cast(father),而子類轉換為父類就是隱式轉換;

dynamic_cast:用於物件的指標和引用,當用於多型型別轉換時,允許隱式轉換及相反的過程中,與static_cast的不同之處在於,在相反的轉換過程中,dynamic_cast會檢測操作的有效性,如果返回的不是被 請求的 有效完整物件,則返回null,反之返回這個有效的物件,如果是引用返回無效時則會丟擲bad_cast異常;

const_cast:這個轉換操作會操縱傳遞物件的const屬性,或者設定或者移除該屬性。

若全域性變數僅在單個C 檔案中訪問,則可以將這個變數修改為靜態全域性變數,以降低模組間的耦合度

以下程式碼的執行結果為:

class Base {

public:

Base() {echo();}

virtual void echo() {printf(“Base”);}

};

class Derived:public Base {

public:

Derived() {echo();}

virtual void echo() {printf(“Derived”);}

};

int main() {

Base* base = new Derived();

base->echo();

return 0;

}

Base

Derived

Derived

Base* base = new Derived();

//首先將上面的語句分成兩部分:

//前一部分是基類指標指向子類物件實現動態繫結,後一部分是new了一個子類物件;

//語句執行時,先執行後一部分new Derived()這句話,它會呼叫Derived() {echo();}

//而執行派生類的建構函式時,會先去執行基類的建構函式,所以會呼叫Base() {echo();},此時不涉及到虛擬函式的動態繫結,

//因為我們現在才執行了後一部分,還沒有動態繫結,所以正常呼叫基類的echo()函式,執行完後返回到子類的建構函式,執行子類的echo();

//然後執行前一部分,實現虛擬函式的動態繫結。

base->echo();

//此時考察的就是虛擬函式的使用了,基類echo申明為虛擬函式,所以呼叫時會去子類尋找對應的虛擬函式執行。