C C和C 的區別

2021-10-23 09:47:27 字數 2630 閱讀 6910

兩個數相加:

c語言:

1、以巨集函式的方法實現,通過文字替換,預編譯階段沒有型別檢查和安全檢查,不安全

#include #difine sum(a,b) (a+b)

int main()

2、用void* 泛型實現,[),如果操作不當,可能發生越界,不安全

void* sum(void* a,int alen,void* b,int blen)
c++:

1、函式過載

int sum(int a, int b)

double sum(double a,double b)

char sum(char a,char b)

函式符號生成規則:

c:只和函式名稱有關,int型別生成的函式名是_sum,double型別生成的函式名也是_sum,char型別生成的函式名也是_sum,因此不能實現函式過載

c++:和函式原型有關,函式返回值+函式名+函式形式引數列表,int型別生成的函式符號是?sum@@yahhh@z,double型別生成的函式符號是?sum@@yannn@z

函式過載是c++的函式符號生成規則做支援;函式返回值如果不同,不能構成函式過載(不能僅靠返回值型別的不同來區分過載函式。因為如果同名函式僅僅是返回值型別的不同,有時可以區分,有時卻不能)。

函式過載三要素:

c++三大特性:封裝,繼承,多型(靜多型,動多型)

同名函式的三種關係:

inline函式和普通函式的區別:inline函式在函式的呼叫點**直接展開,沒有開棧和清棧的開銷,效率高;普通函式呼叫過程有開棧和清棧的開銷產生。

inline函式和static函式的區別:static函式也是本檔案可見,inline函式因為**在呼叫點直接展開,所以本檔案可見;static函式把屬性設定為l,所以本檔案可見。

inline函式和巨集的區別:inline函式在編譯階段處理,有安全檢查,型別檢查;巨集在預編譯階段處理,只做了文字替換,沒有安全檢查和型別檢查;inline函式是一種更安全的巨集。

inline函式的優點:沒有開棧的清棧的開銷,效率高

inline函式的缺點:**膨脹為代價,以空間換時間的概念

inline函式的建議:

inline函式的特徵:

引用:別名(記憶體單元的別名)&;在底層,引用是以指標的方式處理,針對於引用變數使用的地方,系統自帶解引用過程;在表層,引用又稱別名

引用的特點:

1、new是乙個關鍵字,malloc是乙個函式

2、new是系統計算大小,malloc是程式人員設計

3、new返回值型別安全,malloc返回值型別不安全

4、new可以開闢記憶體,可以初始化;malloc只開闢記憶體

5、new,開闢陣列傳入陣列元素個數,malloc 傳遞陣列總大小

6、new開闢的位置稱為自由儲存區,malloc開闢的位置稱為堆區

7、new開闢記憶體失敗,丟擲異常bad_alloc;malloc開闢記憶體失敗,返回null

8、new可以過載,malloc不能過載

9、new可重定位new,可以把分配的記憶體再重新分配;malloc不可以

c語言:把const修飾的變數稱為常變數;在編譯階段檢視常變數有沒有做左值,常變數做左值,編譯器報錯;常變數沒有做左值,其他的處理方式和變數一樣。

const int a;

int* p=&a;

*p=20;

c++:把const修飾的變數稱為常量,在編譯階段把用到常量的地方替換成常量初始化的值

特點:1、常量一定要初始化

2、常量不允許修改,不允許直接修改和間接修改

const int a=10;

int arr[a];

const的用法:

1、const修飾變數

const int gdata=10;//const修飾的全域性變數是l(local的符號),代表這個全域性變數只能本檔案可見

const int ldata=20;//這個區域性變數是乙個常量

const int mdata =20;//const修飾的成員變數一定要在建構函式的初始化列表進行初始化

2、const修飾類成員方法

const修飾的成員變數叫常成員變數,const修飾的成員方法叫常方法

常方法的this指標:const type* const this

常物件只能呼叫常方法

c++中:extern "c"

1、c++呼叫c

2、c語言呼叫c++

(1)c++允許修改

(2)c++不允許修改

_cplusplus:所以c++原始檔自帶,c語言沒有,可以通過這個巨集判斷是c++還是c語言原始檔

C C和C 的區別2

接上篇const的其它用法 1 const 形參 防止實參被修改 接收臨時量 替代實參傳遞時的位址傳遞 形參為指標的定義 int mul const int a,const int b int main 2 const const 杜絕間接訪問修改常量記憶體塊的值 int p const int p...

C C 有什麼不同 C和C 的區別

1.從機制上 c是面向過程的,但c也可以編寫物件導向的程式 c 是物件導向的,提供了類。但是,c 編寫物件導向的程式 以下簡稱oop 比c容易。2.從適用的方向 場景 高效 遊戲 金融 c適合要求 體積小的,效率搞的場合,如嵌入式 c 適合更上層的,複雜的 linux核心大部分是用c寫的,因為他是系...

C C 堆和棧的區別

資料結構的堆疊暫時忽略不談。1 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結...