兩個數相加:
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 一般由程式設計師分配釋放,若程式設計師不釋放,程式結...