本文基於《c++ primer(第5版)》和網上部落格,整理而成。
一、型別別名
型別別名是乙個名字,它是某種型別的同義詞,有兩種方法可用於定義型別別名:typedef、using。
1、關鍵字typedef
typedef 它在自己的作用域內給乙個已經存在的型別乙個別名,編譯階段,會進行型別檢查。
1 typedef double wages; //wages是double的同義詞
2 wages hourly; //
等價於double hourly;
注意:使用typedef時,最後要加分號,另外,含有typedef的宣告語句定義的不再是變數而是型別別名。
(1)指標、常量和型別別名
若某個型別別名指代的是復合型別或常量時,要特別注意。
1 typedef char *pstring;2 pstring a,b; //
a,b都是指向char的指標
3const pstring cstr=0; //
cstr是指向char的常量指標
針對pstring,其基本資料型別是指標,對第三行**它實際上相當於char* const。故不能直接將型別別名替換成它本來的樣子,來理解該語句的含義。
注:當const和typedef一起出現時,typedef不是僅僅簡單的字串替換。
(2)返回陣列指標
1 typedef int arrt[10]; //arrt是乙個型別別名,它表示的型別是2//
含有10個整數的陣列
3 arrt *func(int i); //
func返回乙個指向還有10個整數的陣列指標
二、#define
1、define是預處理指令的一種,它用來定義巨集,巨集只是乙個簡單的替換,將巨集變數所對應的值替換。不做正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。
1#define n 5
2int
main()
3
2、define的容易出現的問題
(1)如:想計算a=10*10,結果輸出35
1#define n 5+5
2int
main()
3
這是因為define只是簡單的替換,所以,a=5+5*5+5。若想計算10*10,可將第一行改為
1#define n (5+5)
另外,兩者的作用域不同
1、#define 無論在哪定義過,在其它的地都可以使用
2、typedef 只能在定義的作用域內使用
ref:
C語言中typedef的用法和 define區別
typedef 型別定義 typedef 是給各種資料型別定義新名字,主要是用來簡潔的表示一些複雜的資料型別,比如說指向其他物件指標之類 defined也有這個意思,但是define巨集只是進行一種簡單的替換。普通的變數宣告方式,比如 宣告乙個字元型變數 char c 宣告乙個字元型指標變數為 ch...
c 中 defin的基本意思
空指令,無任何效果 include包含乙個源 檔案 define定義巨集 undef取消已定義的巨集 if如果給定條件為真,則編譯下面 ifdef如果巨集已經定義,則編譯下面 ifndef如果巨集沒有定義,則編譯下面 elif如果前面的 if給定條件不為真,當前條件為真,則編譯下面 endif結束乙...
糾結的const(static) 和 define
const static 和 define 在開發中常用來定義常量,這樣做的好處是 使 更易維護 提高 的效率。1 const static const是c c 中的乙個關鍵字 修飾符 const一般用來定義乙個常量,既然叫做常量,即以後再也不能修改其值。const 定義常量時,編譯器通常不為普通c...