C C 面試知識點1

2022-09-03 07:48:09 字數 1430 閱讀 8758

由於記憶體對齊的原則,在32位機器上,記憶體是4位元組對齊,也就是說,不夠4個位元組的按 4位元組來算。

同理,在64位機器上,記憶體是8位元組對齊。

struct test1

test;   int length_1 =sizeof(test);   // 12= 4+4+4  // sizeof 是運算子不是函式

struct test2

test2;  int length2 = sizeof(test2);  // 12= 4+(1+1+1+1)+4

struct test3

test3;  // 1

struct test4

test4;  // 1+1 =2

前面的位元組加後面的位元組不超過記憶體對齊所需要的位元組,就不會用0來填充; 實際多少個位元組就是多少個位元組

int a=0, b=1;

cout <1>在函式體內部定義變數,該變數從程式開始到結束只會分配一次記憶體,當再次進入該函式的時候,其值不變,仍為上次退出時的值 

int f()

模組內的static定義的變數和函式不能被外部引用,唯一的辦法是通過乙個間接變數或者函式來引用才行

類中定義的static變數屬於整個類,即類成員變數,與物件無關,只會在執行的時候建立一次

類中定義的static函式屬於整個類,及類成員函式,與物件無關,所以不能在靜態函式裡面使用this指標,這個是物件獨有的。

例子:class test

//靜態成員函式只能引用靜態成員變數

};int test::m_i = 6;

int main()

4. const 

定義普通變數的時候,只能初始化一次,以後不可再修改其值。

定義指標變數時,再型別前,則值不能改,再型別後,則其位址不能改,若兩個都有,則兩者都不能改。 

int a = ;

cout << "&a[0]: "<< &a[0]<&a[0]: 0x61fefc

&a[1]: 0x61ff00

&a[2]: 0x61ff04

&a[3]: 0x61ff08

&a[4]: 0x61ff0c

(&a[0]+1): 0x61ff00

(a+1): 0x61ff00    // value for a and &a is the same, but the concept is diff, a 表示陣列的首位址, &a表示整個物件的首位址, 所以當它+1的時候,就會跳出陣列邊界

(&a+1): 0x61ff10

a.c結構體內部不允許有函式存在,c++允許 

b.內部成員變數許可權不同,c的只能是public,c++的可以有三種。 

c.c結構體不可以繼承,c++可以繼承結構體或者類

C C 面試小知識點

1.static有什麼用途。解答 在函式體中,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所有函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。在模組內,乙個被宣告為靜態的函式只可被這一模組內的其它函式呼叫。也就是...

C 面試知識點1

c 指標和引用的區別 相同點 1 都是對位址的概念 指標指向一塊記憶體,而引用是某塊記憶體的別名。不同點 1 指標本身就是乙個物件,允許對指標賦值和拷貝。引用僅是個別名 2 指標不需要在定義的時候賦初值,即可以為空,而且指標生命週期內可以先後指向幾個不同的物件。但是引用必須要初始化 不但不能為空而且...

java面試知識點(1)

一直對tcp http 和socket稀里糊塗的,今天專門的查了下 tcp ip是個協議組,它分為網路層,傳輸層和應用層,網路層 ip協議 icmp協議 arp協議 rarp協議和bootp協議。傳輸層 中有tcp協議與udp協議。應用層 ftp http telnet smtp dns等協議。tc...