C 與C之比較

2021-07-31 09:47:14 字數 1422 閱讀 2302

1.函式原型宣告中都可以省略引數名稱,只保留型別名稱

2.空引數和可變引數

fuc()

c++中表示沒有引數

c語言中表示引數不確定,表示沒有引數是:func(void)

可變引數(二者一樣)

int func(int a, ...)  引數的型別與個數都不確定

3.返回值

c中宣告函式可以不寫返回值型別,預設為int     

main()

c++宣告函式必須有返回值型別,如果沒有返回值型別,則用void宣告。

4.true和false----bool型資料

在c語言中兩者都不是關鍵字,非零即true

在c++中是關鍵字,但不能用以下方式比較

if ( a == true)

因此,儘管c++擁有布林型變數,但由於與c語言相容,仍然不能直接對乙個布林型變數做對比操作。

5.作用域

c語言強制乙個函式中所有變數在函式開始時就要全部定義,變數的作用域就是整個函式

c++,可以在任意位置定義變數

6.c++中增加了引用型別

主要應用在引數的傳遞過程中

引用只能初始化,不可另外賦值

void型別沒有引用

7.register關鍵字的變化

register關鍵字請求「編譯器」將區域性變數儲存於暫存器中

c語言中無法取得register變數位址

在c++中依然支援register關鍵字

c++編譯器有自己的優化方式,不使用register也可能做優化

c++中可以取得register變數的位址

c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效

8.全域性變數的定義

在c語言中,重複定義多個同名的全域性變數是合法的

在c++中,不允許定義多個同名的全域性變數

c語言中多個同名的全域性變數最終會被鏈結到全域性資料區的同乙個位址空間上。

c++直接拒絕這種二義性的做法。

9.對const常量的處理

當碰見常量宣告時在符號表中放入常量

編譯過程中若發現使用常量則直接以符號表中的值替換

編譯過程中若發現對const使用了extern或者&操作符,則給對應的常量分配儲存空間

注意:c++編譯器雖然可能為const常量分配空間,但不會使用其儲存空間中的值

c語言中const變數是唯讀變數,有自己的儲存空間

c++中的const常量

可能分配儲存空間

當const常量為全域性,並且需要在其它檔案中使用

當使用&操作符取const常量的位址

10.引用

在c++中可以使用引用實現數值交換,而在c語言中沒有此語法

e.g:

void swap(int& a, int& b)

C 語法之比較

本次將以如下順次介紹c 中的比較 1.型別比較 2.值比較 2.1.運算子過載 2.2.icomparable和icomparer介面的實現 2.3.型別轉換 1.型別比較 有2種方式進行型別比較 gettype 和 is ctypetst l typeclass new ctypetst 型別比較...

C 值型別 引用型別複製之比較

眾所周知,c 複製有深度複製和淺度複製,這裡本人新增了它們與賦值運算 進行複製的的比較。首先,定義乙個類content 作為後面要用的字段型別,content 包含乙個 int型字段 val。然後,定義值型別mystruct 和myclass 各包含乙個值型別欄位和乙個引用型別字段。並且它們都支援 ...

C 傳值關鍵字Ref 與 Out 之比較

最近也研究了ref 與out 關鍵字在做方法入參時的區別,現在寫出來以備 在c 中,我們可以通過值 by value 也可以通過引用 by reference 傳遞引數。通過引用傳遞引數允許函式成員更改引數的值,並保持該更改。若要通過引用傳遞引數,可使用 ref 或 out 關鍵字。ref和out這...