學好C 必須要注意的十八個問題

2021-07-02 08:05:49 字數 2827 閱讀 1795

學好c++必須要注意的十八個問題:

一、#include 「filename.h」和#i nclude 的區別

#include 「filename.h」是指編譯器將從當前工作目錄上開始查詢此檔案

#include 是指編譯器將從標準庫目錄中開始查詢此檔案

二、標頭檔案的作用

加強安全檢測

通過標頭檔案可能方便地呼叫庫功能,而不必關心其實現方式

三、* , &修飾符的位置

對於*和&修飾符,為了避免誤解,最好將修飾符緊靠變數名

四、if語句

不要將布林變數與任何值進行比較,那會很容易出錯的。

整形變數必須要有型別相同的值進行比較

浮點變數最好少比點,就算要比也要有值進行限制

指標變數要和null進行比較,不要和布林型和整形比較

五、const和#define的比較

const有資料型別,#define沒有資料型別

個別編譯器中const可以進行除錯,#define不可以進行除錯

在類中定義常量有兩種方式

1、 在類中宣告常量,但不賦值,在建構函式初始化表中進行賦值;

2、 用列舉代替const常量。

六、c++函式中值的傳遞方式

有三種方式:值傳遞(pass by value)、指標傳遞(pass by pointer)、引用傳遞(pass by reference)

void fun(char c) //pass by value

void fun(char *str) //pass by pointer

void fun(char &str) //pass by reference

如果輸入引數是以值傳遞的話,最好使用引用傳遞代替,因為引用傳遞省去了臨時物件的構造和析構

函式的型別不能省略,就算沒有也要加個void

七、函式體中的指標或引用常量不能被返回

char *func(void)

函式體內的指標變數並不會隨著函式的消亡而自動釋放

八、乙個記憶體拷貝函式的實現體

void *memcpy(void *pvto,const void *pvfrom,size_t size)

九、記憶體的分配方式

分配方式有三種,請記住,說不定那天去面試的時候就會有人問你這問題

1、 靜態儲存區,是在程式編譯時就已經分配好的,在整個執行期間都存在,如全域性變數、常量。

2、 棧上分配,函式內的區域性變數就是從這分配的,但分配的記憶體容易有限。

3、 堆上分配,也稱動態分配,如我們用new,malloc分配記憶體,用delete,free來釋放的記憶體。

十、記憶體分配的注意事項

用new或malloc分配記憶體時,必須要對此指標賦初值。

用delete 或free釋放記憶體後,必須要將指標指向null

不能修改指向常量的指標資料

十一、內容複製與比較

//陣列……

char a=」hello word!」;

char b[10];

strcpy(b,a);

if (strcmp(a,b)==0){}

//指標……

char a=」hello word!」;

char *p;

p=new char[strlen(a)+1];

strcpy(p,a);

if (strcmp(p,a)==0){}

十二、sizeof的問題

記住一點,c++無法知道指標所指物件的大小,指標的大小永遠為4位元組

char a=」hello world!」

char *p=a;

cout << sizeof(a) << endl; //12位元組

cout << sizeof(p) <

class base

student s = ; //初始化student的例項s

cout <

class baseclass

};class derivedclass: public baseclass

};void print(baseclass* pbc)

int main( )

v-table (virtual function table)

當c++程式呼叫非虛函式, 採用與c程式呼叫函式所用方式一樣的靜態繫結來呼叫函式. 但是c++程式 若是透過指向類別的指標來呼叫虛函式時, 編譯程式則採用所謂的晚期繫結(late binding)或靜態繫結 (static binding)技術來呼叫函式.

而c++虛函式用虛函式表(virtual function table), 或稱v-表來實作動態繫結, 所謂的v-表是一 個函式指標的陣列, 這是編譯程式替每個使用虛函式的類所建制的。

純虛函式 (pure virtual function)

乙個不僅可被重新定義, 而且必須被重新定義的成員函式就稱為純虛函式, 你只要指定函式乙個零值 (更有效說法是乙個空指標),就可將虛成員函式轉為純虛成員函式,如以下所示

virtual void printdata() = 0;

抽象類 (abstract class)

當乙個類含有至少乙個純虛函式時, 此類就稱為抽象類,而你無法以此類來衍生建立物件.

五、c++ template classes

一般的宣告及使用

class collection

collection object;

模板的宣告及使用

template class t> //注意這裡

class collection// generic declaration

collection int> object; //注意這裡

collection char> object; //注意這裡

學好C 必須要注意的十八個問題

學好c 必須要注意的十八個問題 一 include filename.h 和 i nclude 的區別 include filename.h 是指編譯器將從當前工作目錄上開始查詢此檔案 include 是指編譯器將從標準庫目錄中開始查詢此檔案 二 標頭檔案的作用 加強安全檢測 通過標頭檔案可能方便地...

C語言初學者的十八個注意點

c語言初學者的十八顆 地雷 c語言的最大特點是 功能強 使用方便靈活。c編譯的程式對語法檢查並不象其它高階語言那麼嚴格,這就給程式設計人員留下 靈活的餘地 但還是由於這個靈活給程式的除錯帶來了許多不便,尤其對初學c語言的人來說,經常會出一些連自己都不知道錯在 的錯誤。看著有錯的程式,不知該如何改起,...

關於使用layer必須要注意的地方

layer 是一款近年來備受青睞的web彈層元件,使用該外掛程式時可以通過open方法開啟相應對話方塊,但是open方法有乙個type屬性,這個屬性在使用時需要特別注意,如果不匹配就會報錯!layer提供了5種層型別。可傳入的值有 0 資訊框,預設 1 頁面層 2 iframe層 3 載入層 4 t...