C和C 的區別

2021-09-20 09:42:32 字數 3229 閱讀 4268

c是結構化語言,是面向過程的,資料與演算法分開。**它的重點在於演算法和資料結構。側重於計算機底層操作。

c++是物件導向的,注重抽象出問題,建立物件模型。**主要特點是類,封裝和繼承。與c的區別主要為 :類、繼承和多重繼承、運算子過載、類模板、c++標準庫、模板庫。

在很大程度上,c++是c的超集。

具體的區別如下:

在c中,函式原型可以是宣告乙個函式名後接乙個圓括號;而c++的函式原型必須和函式的定義時候的引數保持一致。舉例如下:

#include

intadd()

;int

main

(int argc,

char

*ar**)

intadd

(int a,

int b)

pp

#include//int add();

int add(int,int); //函式原型和函式定義的引數一致才行

int main(int argc,char *ar**)

int add(int a,int b)

c把char常量視為int型別,而c++將其視為char型別。

比如說,char ch = 『a』;

在c中,常量『a』被儲存在int大小的記憶體塊中,更準確的說,字元編碼被儲存在乙個int型別的值,相同的數值也儲存在變數ch中,但是在ch中該值只佔記憶體的1個位元組

在c++中,』a』和ch都只佔乙個位元組。

又如,char ch = 『abcd』;

『abcd』表示乙個4個位元組的int型別值,其中第1個位元組儲存a的字元編碼,第2個位元組儲存b的字元編碼,以此類推。

//c_c++_different.c

#include

void

test()

printf

("%lld\n,"

,num);}

intmain

(int argc,

char

*ar**)

在c中,全域性的const具有外部鏈結;

在c++中,全部的const具有內部鏈結;

即,c++中宣告為:const double pi = 3.14159;

相當於在c中宣告為:static const double pi = 3.14159;

如果const變數是內部鏈結,每個包含該標頭檔案的檔案都會獲得乙份const變數的備份;

如果const變數是外部鏈結,就必須在乙個檔案中進行定義式的宣告,然後在其他檔案中使用關鍵字extern進行引用式宣告

在c++中,可以使用const值來初始化其他const變數,但在c中不能這樣做,

在c語言中,用const型別限定符宣告的式變數,不是常量,用於限定乙個變數為唯讀

//c_c++_different.c

#include

const

int a =1;

const

int b =2;

//const int c = a * b; //c中會報錯

intmain

(int argc,

char

*ar**)

宣告乙個有標記的結構或聯合後,就可以在c++中使用這個標記作為型別名;但在c中,需要struct+標記名才能作為乙個型別名,單單的型別名會被編譯器解釋為變數名。

//c_c++_different.c

#include

struct duo

;int

main

(int argc,

char

*ar**)

c++使用列舉比c嚴格。在c++中,只能把enum賦給enum變數,然後把變數與其他值作比較,不經過顯式強制轉換,不能把int型別值賦給enum變數,而且也不能遞增乙個enum變數。

//c_c++_different.c

#include

intmain

(int argc,

char

*ar**)

;enum sample season;

/* c和c++都可以 */

season = sage;

/* 在c中會發出警告,在c++中會是錯誤 */

season =

(enum sample)3;

/* c和c++都可以 */

season++

;/* c可以,在c++中是乙個錯誤 */

return0;

}

c++可以把任意型別的指標賦給指向void的指標,這點和c一樣。不同的是,c++只有顯式強制型別轉換才能指向void的指標賦給其他型別的指標。

c++可以把派生類物件的位址賦給基類指標,但在c類中沒有這裡涉及的特性。

//c_c++_different.c

#include

intmain

(int argc,

char

*ar**)

;int

*pi;

void

* pv;

pv = ar;

/* c和c++都可以 */

pi = pv;

/* c可以,c++不可以 */

pi =

(int

*) pv;

/* c和c++ 都可以*/

return0;

}

在c++中,布林型別是bool,而且true和false都是關鍵字;

在c中,布林型別是_bool,但是要包含stdbool.h標頭檔案才可以使用bool,true和false

在c++中,可以用or來代替||,還有其他的可選拼寫,它們都是關鍵字。

在c99和c11中,這些可選拼寫都被定義為巨集,要包含iso64.h才能使用它們。

在c++中,complex標頭檔案提供了乙個複數來支援複數型別;

在c中,通過complex.h標頭檔案來支援;

這兩種方法區別不大,但是不相容。

一些只有c99和c11才有的特性:

1)指定初始化器

2)復合初始化器

3)受限指標(即,restric指標)

4)變長陣列

5)伸縮型陣列成員

6)帶可變數量引數的巨集

C 和C的區別

c 與c語言的關係 1 c 繼承了所有的c特性 2 c 在c的基礎上提供了更多更好的語法和特性 3 c 的設計目標是執行效率和開發效率的統一 c 對c語言的加強 1 c 中所有的變數都可以再需要使用時再定義 如 for迴圈等中需要的變數 3 c中可以定義多個同名的全域性變數 c 不可以 4 cons...

C和C 的區別

這裡主要討論的是區別,而不是c 中有的,而c語言中沒有的東西。c 比c語言多了很多東西,最重要的當屬類 物件導向程式設計 和模板 泛型程式設計 基於泛型程式設計還引出了元程式設計 metaprogramming 等等。這裡討 共部分但是不一樣的部分 函式過載是c 支援的,c不支援 c 的函式過載在類...

C 和C的區別

c c 的聯絡 c c 區別 小知識點補充擴充套件 free 而new開闢物件陣列用的是new size 釋放的的時候是 delete 5 返回值問題,malloc開闢成功返回void 需要強轉,失敗返回null,new 成功返回物件指標,失敗丟擲異常 這就可能會提到c 的new handler機 ...