-
這不是誰取代誰的問題,typedef 沒有定義。 我認為可以這樣理解:你可以把typedef看作是乙個普通的定義,pstring相當於定義了string*型別的變數,然後pstring str就像複製乙個型別的變數作為pstring。
const pstring ptr,首先psstring是乙個指標,所以ptr是乙個const指標,在定義它的時候必須初始化。
-
它是 psstring 替換 string*
對於你新增的問題,我進行了實驗,確實如你所說。 我不太了解,所以我又做了兩組實驗:
1. 如果定義為define pstring string*,可以編譯(因為是直接替換的,所以和const string* pstr是一樣的),就是問題就是不能簡單地把typedef理解為替換,也就是define。
2. 那麼typedef和define有什麼區別,我定義typedef const string* pstring; 也通過了。 也就是說,const pstring 編譯器不認為它是乙個型別(我不知道該怎麼想)。
知道就是知道,不知道就是不知道,我看了一眼,發現這個知道:
我不知道你是否明白。
-
typedef string * pstring;
如果使用 psstring 表示字串 * string * 是指向字串型別的指標,則使用 psstring 定義的 ptr 也是指向字串型別的指標。
Pstring 是 string * 的另乙個名稱,只是為了記憶。
-
請從右到左閱讀所有定義。
typedef string *pstring;
從右邊看,pstring 是指向字串物件的指標。
const string * p;
p 是指向 String 物件的指標,該物件是 const。 所以 p 是指向 const 字串的指標。
string* const p;
p 是 const,const 的指標,指向字串,所以 p 是指向字串的 const 指標。
const string* const p;
p 是 const,const 的指標指向 String,而這個 String 物件是 const,所以 p 是指向 const 字串的 const 指標。
-
1) Typedef 可以宣告各種型別名,但不能用於定義變數。可以使用 typedef 來宣告陣列型別和字串型別,使用起來更方便。
2) 使用 typedef 只會將型別名稱新增到現有型別,但不會建立新型別。
3)當同一型別的資料(特別是陣列、指標、結構體、公共資源等資料)在不同的原始檔中使用時,通常使用typedef來宣告一些資料型別,將它們分別放在標頭檔案中,然後使用include命令將它們包含在需要用於提高程式設計效率的檔案中。
4)typedef的使用有利於程式的泛化和可移植性。有時程式依賴於硬體功能,而 typedef 很容易移植。
-
typedef int integer;使用識別符號整數指定 int 型別。
typedef float real;指定 real 表示浮點型別。
這樣,以下兩行是等效的:
int i,j; float a,b;
integer i,j; real a,b;在程式中,整數變數專門用於計數,計數可以用作整數型別名稱:
typedef int count;指定 count 用於表示 int 型別。
count i,j;將變數 i,j 定義為計數型別,即 int 型別在程式中將變數 i,j 定義為計數型別,使人們更容易一目了然地知道它們是用於計數的。 您還可以宣告結構型別:
typedef struct 請注意,關鍵字 typedef 在 struct 之前使用,以指示已宣告新名稱。
int month; int day; int year; }date;請注意,date 是新型別的名稱,而不是 struct 變數的名稱。
宣告日期的新型別名稱表示上面指定的結構型別之一。 這樣就可以用日期定義變數:
date birthday; date *p;p 是指向此結構型別資料的指標。
它還可以進一步:
typedef int num[100];將 num 宣告為整數陣列型別,包含 100 個元素 num n; 將 n 定義為包含 100 個整數元素的陣列。
typedef char *string;將字串宣告為字元指標型別字串 p,s[10]; p 是字元指標變數,s 是指標肢陣列(有 10 個元素)。
typedef int (*pointer)( 宣告指標指向指標日曆肢體型別的函式,該函式返回整數值 pointer p1,p2; p1 和 p2 是指標變數。