define char* string;
string filename;
這段**是可以工作的那麼為什麼還要多個typedef呢?
請看下面**
利用上面的**,如果這樣寫
string file1,file2;
經過替換, 變成
char* file1,file2;
雖然在編譯上不錯但是含義卻錯了, 裡面的 file1是指標而file2是乙個字元
但是用了 typedef就沒這個問題了.
typedef char* string;
string file1,file2;
相當於
char *file1,*file2;
利用typedef這個特性
我們可以這樣寫一句話
typedef void (*pf)(); //乙個函式指標
(*(pf)0x12345678)(); //將位址 0x12345678看作乙個函式的開始.
但是,typedef也有侷限性.用它定義的型別不能組合使用.
typedef int int32;
unsigned int32 a;
這樣用就錯了.
因為編譯器並沒有翻譯成 unsigned int a;
而是直接拒絕了這樣的組合.
相反,#define就沒這個問題了
#define int int32;
unsigned int32 a;
使用typedef一些需要注意的問題.
typedef char *string;
const string s;
上面的定義究竟是
const char *s; //s是乙個指向 const char的指標 (指標所指向的內容唯讀)
還是 char *const s; //s是指向char 的const指標 (指標本身的位置無法改變)
正確答案是後者.因為 typedef 定義了 string 後, const修飾的物件是 string 而 string本身
是指標,於是const string的意思就是 string的值是常量,最後, s就被理解為指向char 的 const
指標了.
還有點需要注意.
1 c++裡面允許完全相同的typedef 表示式多次出現.
比如:
void abc()
這是正確的
2 * 這個申明符號是右結合的.
char* s1,s2;
相當於
char (*s1),s2;
Typedef和define的區別
typedef和define都可以用來給物件取乙個別名,但是兩者卻有著很大不同。1 首先,二者執行時間不同 關鍵字typedef在編譯階段有效,由於是在編譯階段,因此typedef有型別檢查的功能。define則是巨集定義,發生在預處理階段,也就是編譯之前,它只進行簡單而機械的字串替換,而不進行任何...
typedef和 define的區別
一 typedef的用法 二 define的用法 define為一巨集定義語句,通常用它來定義常量 包括無參量與帶參量 以及用來實現那些 表面似和善 背後一長串 的巨集,它本身並不在編 譯過程中進行,而是在這之前 預處理過程 就已經完成了,但也因此難以發現潛在的錯誤及其它 維護問題,define的用...
typedef和 define的區別
typedef和 define的區別 使用巨集定義的重新命名常量的好處 程式易讀性強 便於維護和修改 1 define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。例如 define pi 3.141592...