C關於typedef的兩個典型錯誤!

2021-06-08 12:10:28 字數 651 閱讀 5562

1:對於使用者定義型別,typedef與#define的區別:

乙個是型別定義(定義乙個新的型別),另乙個是巨集定義(簡單的文字替換),一般來說最好使用typedef,部分原因是它能夠正確處理指標型別,例如,考慮以下宣告:

typedef char * string_1;

#define string_2 char *;

string_1 s1,s2;

string_2 s3,s4;

s1,s2,s3都被定義成char *,但s4卻被定義成了char型,這可能並非原來所希望的,另外#define也有其他優點,可以與條件編譯#ifdef等一起使用

2:typedef char * string;

const string s;與const char * s不等價

s不是常量指標(指向常量的指標)而是指標常量(指標本身是常量)

因為typedef 的替換並不是完全基於文字(這正是typedef的優點之一)在宣告const string s中s被宣告為const的原因與const int i將i宣告為const的原因一致,s的宣告不會深入到typedef內部來發現指標。

補充:如下定義

#define string char *

const string s;  與const char * s等價;

Typedef 的 四個用途 兩個陷阱

四個用途 兩個陷阱 用途一 定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb 這多數不符合我們的意圖,它只宣告了乙個指向字元變數的指標,和乙個字元變數 以下則可行 typedef char pchar 一般用大寫 pchar pa,pb 可行,...

C語言typedef的四個用途和兩個陷阱

用途一 定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb 這多數不符合我們的意圖,它只宣告了乙個指向字元變數的指標,和乙個字元變數 以下則可行 typedef char pchar 一般用大寫 pchar pa,pb 可行,同時宣告了兩個指向字...

typedef的四個用途和兩個陷阱

用途一 定義一種型別的別名,而不只是簡單的巨集替換。可以用作同時宣告指標型的多個物件。比如 char pa,pb 這多數不符合我們的意圖,它只宣告了乙個指向字元變數的指標,和乙個字元變數 以下則可行 typedef char pchar 一般用大寫 pchar pa,pb 可行,同時宣告了兩個指向字...