C 面試題目彙總二

2021-09-16 13:46:59 字數 4108 閱讀 8273

int func(int x)

return countx;

}

思路:將x轉化為2進製,看含有的1的個數。答案是8.。

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

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

void main()

; int *ptra = (int *)(a + 1);

int *ptrb=(int *)(&a+1);

cout << *(a + 1) << " " << *(ptra- 1)<<" "<<*(ptrb-1) << endl;//輸出2 1 5

}

用法不同:typedef用來定義一種資料型別的別名,增強程式的可讀性。define主要用來定義常量,以及書寫複雜使用頻繁的巨集。

常量型別的函式只有權讀取外部資料內容,但無權修改他們。

格式《型別說明符》《函式名》(《參數列》)const;

當乙個函式被const說明後,其函式**現的對外部資料的任何寫入或修改都將被系統檢查為出錯。如果把函式writeme()說明為:

void writeme(int i) const

系統將會檢查出錯誤。

作用當函式體較大且複雜時,如果我們希望系統幫助避免對物件內容進行修改,那麼我們就會將這個函式定義為常量型函式,這就是使用它的主要目的。

map的實現

stl中map的實現是基於rbtree。

vector的實現

vector通過乙個連續的陣列存放元素,如果集合已滿,在新增資料的時候,就要分配一塊更大的記憶體。

從邏輯結構上來說,這兩種資料結構都屬於線性表

空類增加乙個一位元組的啞成員來佔位。c++中規定無資料成員的結構有最小的非零長度,為了防止與他相鄰的資料物件有相同的位址。

主要處理#開始的預編譯指令,預編譯指令指示了在程式正式編譯前就由編譯器進行的操作。預編譯又稱為預處理 , 是做些**文字的替換工作。

char str1=

"abc"

;char str2=

"abc"

;const

char str3=

"abc"

;const

char str4=

"abc"

;const

char

*str5 =

"abc"

;const

char

*str6 =

"abc"

;char

*str7 =

"abc"

;char

*str8 =

"abc"

; cout <<

(str1 == str2)

<< endl;

//0 cout <<

(str3 == str4)

<< endl;

//0 cout <<

(str5 == str6)

<< endl;

//1 cout <<

(str7 == str8)

<< endl;

//1

str1,str2,str3,str4是陣列變數,他們有各自的記憶體空間;而str5,str6,str7,str8是指標,他們指向相同的常量區域。

#include

using

namespace std;

void

fun(

char str)

intmain()

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

int

main()

沒有為str分配記憶體空間,將會發生異常。問題出在將乙個字串複製進乙個字元變數指標所指位址。雖然可以正確輸出結果,但因為越界進行內在讀寫而導致程式崩潰。

char

*s =

"aaaa"

;printf

("%s"

, s)

; s[0]

='b'

;printf

("%s"

, s)

;

對是s[0]的賦值操作是不合法的,修改字元常量的值是不合法的。

``cpp

while(1)

```cpp

for(;;)

當要求使用volatile宣告變數值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。精確地說就是,遇到這個關鍵字宣告的變數,編譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊位址的穩定訪問;如果不使用valatile,則編譯器將對所宣告的語句進行優化。

1>告訴compiler不能做任何優化。

2>用volatile定義的變數會在程式外被改變,每次都必須從記憶體中讀取,而不能重複使用放在cache或暫存器中的備份。

答:共享儲存系統、訊息傳遞系統、管道:以檔案系統為基礎

答:資源競爭及程序推進順序非法;互斥、請求保持、不可剝奪、環路

答:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖

答:fcfs(先來先服務),優先順序,時間片輪轉,多級反饋

答:應用層、表示層、會話層、運輸層、網路層、物理鏈路層、物理層 tcp/udp屬於運輸層

tcp服務提供了資料流傳輸、可靠性、有效流控制、全雙工操作和多路復用技術等。 與tcp 不同, udp並不提供對ip協議的可靠機制、流控制以及錯誤恢復功能等。由於udp比較簡單,udp頭包含很少的位元組,比tcp負載消耗少 

tcp: 提供穩定的傳輸服務,有流量控制,缺點是包頭大,冗餘性不好 udp: 不提供穩定的服務,包頭小,開銷小

unsigned

short a =10;

printf

("~a=%u\n"

,~a)

;//~a=4294967285

char c =

128;

printf

("c=%d\n"

, c)

;//c=-128

第一題,~a =0xfffffff5, int值為-11,但輸出的是uint。所以輸出4294967285。

第二題,char是有符號的,c=0x80,輸出的是int,最高位為1,是負數,所以它的值就是0x00的補碼就是128,所以輸出-128。

答:c用巨集定義,c++用inline

typedef

union

date;

struct data too;

date max;

printf

("%d\n"

,sizeof

(too)

+sizeof

(max));

//20+32=52

#include

#include

#define int(x) (x-'0')

#define ch(x) (x+'0')

char a[

101]

;char b[

101]

;char result[

200]

;int

main()

result[

199- i - sizea]

+= rest;

}int n =0;

while

(n <

200&& result[n]==0

)if(n ==

200)

else

printf

("\n");

}}return0;

}

C 面試題目彙總

寫這篇文章的初衷 平時在實驗室用的都是linux系統的ubuntu版本,想儲存一下c 面試相關的題目及答案的時候,沒辦法用office套件記錄,就用寫部落格的方式記錄吧,殊途同歸。文章持續更新中 const比 define好。首先,它能夠明確指定型別,能夠在編譯階段進行型別檢查,而 define只是...

C 面試題目彙總

動態記憶體分配 malloc與new的區別 c 中的 new delete 和 new delete c 智慧型指標詳解 c 傳值呼叫與引用呼叫的區別 c 拾遺 從記憶體布局看c 虛繼承的實現原理 c 虛基類的實現機制 筆記 c 虛繼承實現原理 虛基類表指標與虛基類表 什麼是多型?為什麼要使用多型?...

面試題目彙總

磁碟快取最好是把 sqlite 和檔案儲存結合起來 key value 元資料儲存在 sqlite 中,而 value 資料則根據大小不同選擇 sqlite 或檔案儲存。複製 自己封裝乙個網路,如果離開a頁面去了b頁面,那麼a頁面的網路請求怎麼立即取消 複製 分流三種。1,集群 將併發請求分配到不同...