2012-07-03 70 views
0

我期待在LPSTR定義爲語法的別名

typedef char* PSTR, *LPSTR;

文檔說PSTR是LPSTR的別名。解除引用操作符是否缺少足以告訴我它是別名的事實?如何聲明別名?換句話說,如果我改變這

typedef char* PSTR, PSTR2, *LPSTR;

難道我現在有兩個別名的?如果我添加另一個解除引用的變量呢?

typedef char* PSTR, *LPSTR, *LPSTR2;

回答

2

什麼都沒有丟失。星號周圍的空白不重要。

此:

typedef char* PSTR, *LPSTR; 

相同

typedef char *PSTR, *LPSTR; 

這又是與具有

typedef char *PSTR; 
typedef char *LPSTR; 

兩者都定義類型alisaes針對類型「指針char 「,但他們之間沒有任何聯繫,他們都是用sa聲明的我typedef沒有多大關係,主要是當你想變體(有和沒有指針),像這樣做:

typedef struct { 
    int x, y; 
} Point, *PointPtr; 

此,順便說一句,是一種實踐我真的勸阻(如代碼在這個問題本身),因爲「隱藏星號」通常是一個壞主意。星號重要的是,並且讓它呈現而不是隱藏在該類型中會使代碼更清晰。

2

什麼是別名的意思是,

typedef char* PSTR, *LPSTR; 

相當於

typedef char *PSTR; 
typedef char *LPSTR; 

所以他們完全一樣的類型:char*別名。 (事實上​​,你必須在第一種格式中鍵入*兩次是C聲明語法的怪癖。)

Btw。,這些不是「解除引用的變量」。它們是指針類型。

1
typedef char* PSTR, PSTR2, *LPSTR; 

PSTR是一個指針,LPSTR是一個指針,但PSTR2是一個char。我會用不同的寫法:

typedef char *PSTR, PSTR2, *LPSTR; 

顯示*真正關聯的位置。