面試 C語言C 小知識總結 1

2021-07-15 22:36:56 字數 2091 閱讀 4754

(1)關於宣告和定義的區別(變數可以被宣告多次但是只可以被定義一次)

宣告:不分配記憶體空間

int a;//這樣既是宣告也是定義

int a = 3;//定義

extern int a;//宣告,通過extern關鍵字宣告變數而不是去定義它

extern int a = 3;//定義

函式的宣告和定義比較簡單,帶{}就是定義,不帶就是宣告

一般除了extern,變數都是定義

(2)關於bool,和float與0的比較

bool flag;

if(flag)

else

//假設若abs(a)<1e-3的時候就算做是0

float flag;

if((flag<=1e-3)&&(flag>=-1e-3))

else

(3)sizeof和strlen區別

sizeof是操作符,strlen是庫函式(同理還要記得new和delete是操作符,malloc和free是函式)

sizeof的引數型別多樣,strlen只能是以'\0'結尾的字串

陣列被傳入sizeof的時候引數不退化,但是作為strlen會退化為指標

sizeof的結果是在編譯的時候計算出來的,strlen則是在運算時才計算出來

.的優先順序高於前置++,但是如果前置加加是我們自己寫的那他就不再是操作符而是函式所以會先執行前置加加

(4)標準的巨集min

#define min(a,b) ((a)<(b)?:(a):(b))

(5)關於a與&a區別

int a[5] = ;

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

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

printf("%d,%d,%d\n",*(a+1),*(ptr-1),*(ptr2-1));

2,5,1

(6)c,c++的記憶體分配

乙個c,c++程式在編譯的時候存在5大儲存區:

堆區,棧區,全域性區,文字常量區,程式**區

全域性變數和靜態變數在靜態儲存區域分配

函式的區域性變數在棧區

動態記憶體分配在堆上分配

(7)strcpy,sprintf,memcpy

char *strcpy(char* dest, const char *src);//目的是把src的內容複製到dest中

int sprintf( char *buffer, const char *format, [ argument] … );//轉換成字串再放入的陣列之中

buffer

: char型指標,指向將要寫入的字串的緩衝區。

format

:格式化字串。

[argument]..

.:可選引數,可以是任何型別的資料。

sprintf(s, "%s love %s.", who, whom);
把字串的值放到陣列s中

void *memcpy(void *dest, const void *src, size_t n)//拷貝的是位元組,也就是記憶體塊之間的拷貝

從源src所指的記憶體位址的起始位置開始拷貝n個位元組到目標dest所指的記憶體位址的起始位置中

效率方面:memcpy最高,strcpy其次,sprintf最低

(8)關於拷貝建構函式與賦值運算子的認識

1.拷貝函式會生成新的類物件,而賦值運算子不會

2.拷貝建構函式是建立乙個新類,所以不必擔心兩個物件是否相同,但是賦值運算子需要這個操作,而且賦值運算子如果原先物件中有記憶體分配我們還要釋放掉他。

(9)c++中的繼承

繼承於a的函式在構造的時候一定會先呼叫父類的建構函式然後才是自己的,如果你把a的建構函式設定成私有的那麼a就不能夠被繼承了。

(10)虛函式

class a

private:

virtual void f()

};class b:public a

virtual void h()

};typedef void(*fun)(void);

void main()

}輸出結果:

b::g

a::f

b::h

面試 C語言C 小知識總結(2)

1 重寫和過載的區別 範圍區別 被重寫的函式和重寫的函式在兩個類中,而過載和被過載的函式在同乙個類中 引數的區別 被重寫函式和重寫函式的引數一定相同,但是過載函式和被過載函式的引數列表一定不同 virtual的區別 重寫的基類中被重寫的函式必須要有virtual修飾而過載函式和被過載函式可以被修飾也...

C語言知識總結(1)

c語言中的資料型別 變數的儲存 變數例項 int b 10 int a 20 記憶體由大到小定址,優先分配記憶體位址較大的位元組給變數。b的記憶體位址比a大 檢視記憶體位址用 scanf函式 int age scanf d age 注意 d讀入十進位制整數 o讀入八進位制整數 x或 x讀入十六進製制...

c 面試知識總結

子類能夠從父類繼承什麼,不能從父類繼承什麼?能 派生類能夠繼承其基類的成員,但是基類必須將它的兩種成員函式區分開來 一類是基類希望其派生類進行覆蓋的函式 另一類是基類希望派生類直接繼承而不要改變的函式 派生類可以繼承定義在基類的成員,但是派生類的成員函式不一定有權訪問從積累繼承而來的成員 關於許可權...