C語言和C 的簡單區別

2021-10-25 04:56:23 字數 1405 閱讀 3896

c語言雖說經常和c++在一起被大家提起,但其實它們不是乙個東西。下面我來簡單介紹c語言和c++中那些不同的地方。

在c++中我們在定義或宣告乙個函式的時候,有時會在形參中給它賦乙個初始值作為不傳引數時候的預設值,例如:

int fun(int a = 10);

代表沒有傳參呼叫的時候,自動給a賦乙個10的初始值。然而這種操作在c89下是行不通的,在c語言下這麼寫就會報錯。

如果函式有引數則需要壓入實參。平常在我們人為給定實參的時候,是按照引數列表從右向左依次將引數通過。

需要注意的是,賦初始值必須從引數列表的右邊開始賦值,從左邊開始賦值將會出錯:

intc1(

int a =10,

int b)

;//錯誤

intc2

(int a,

int b =20)

;//正確

這樣屬於語法錯誤,呼叫這麼寫不對那就當然不能這樣賦初始值了。

intc(

int a,

int b =10)

;intc(

int a =20,

int b)

;

這樣宣告完全沒有問題,但是注意,這兩句的順序不能反轉,否則就是錯誤的。

c語言中產生函式符號的規則是根據名稱產生,這也就注定了c語言不存在函式過載的概念。而c++生成函式符號則考慮了函式名、引數個數、引數型別。需要注意的是函式的返回值並不能作為函式過載的依據,也就是說int sum和double sum這兩個函式是不能構成過載的。總之c語言不存在函式過載,c++根據函式名引數個數引數型別判斷過載,屬於靜多型,必須同一作用域下才叫過載。

c語言中的const:被修飾後不能做左值,可以不初始化,但是之後沒有機會再初始化。不可以當陣列的下標,可以通過指標修改。簡單來說,它和普通變數的區別只是不能做左值而已。其他地方都是一樣的。

c++中的const:真正的常量。定義的時候必須初始化,可以用作陣列的下標。const在c++中的編譯規則是替換(和巨集很像),所以它被看作是真正的常量。也可以通過指標修改。

說到引用,我們第一反應可能就會想到指標,但引用從本質來說和指標就是同乙個東西,但是在編譯器中它的特性和指標完全不同。

1:malloc和free是函式,new和delete是運算子。

2:malloc在分配記憶體前需要大小,new不需要。

例如:int *p1 = (int *)malloc(sizeof(int));

int *p2 = new int; //int *p3 = new int(10);

malloc時需要指定大小,還需要型別轉換。new時不需要指定大小因為它可以從給出的型別判斷,並且還可以同時賦初始值。

3:new和malloc開闢記憶體的位置不同。

malloc開闢在堆區,new開闢在自由儲存區域。

C語言和C 的區別

c和c 的關係 就像是win98跟winxp的關係。c 是在c的基礎上增加了新的理論,玩出了新的花樣。所以叫c加加。c和c 的區別 c是乙個結構化語言,它的重點在於演算法和資料結構。c程式的設計首要考慮的是如何通過乙個過程,對輸入 或環境條件 進行運算處理得到輸出 或實現過程 事務 控制 c 首要考...

C語言和C 的區別

c 是c發展來的!c 是物件導向的語言,而c是結構化的語言!c的所有 在c 上都能應用,而c 的 在c上不能應用!c 是功能更強大的c!c語言與vc 的區別有很多 1,全新的程式程式思維,c語言是面向過程的,而vc 是物件導向的。2,c語言有標準的函式庫,它們鬆散的,只是把功能相同的函式放在乙個標頭...

C語言和C 的區別

1.字尾不同 2.關鍵字不同 c語言 c99有32個關鍵字 c c 98有63個關鍵字 3.c 面向過程 c 基於物件導向 面向過程與物件導向的區別?1 面向過程 c語言 eat 蛋炒飯 把所有要做的放在一起,無法做到飯與菜的分離,如果想改變菜會造成浪費 舉個例子 開車走在c中這麼想的,先分為幾步 ...