如果型別別名指代的是復合型別,那麼把它用到宣告語句中產生的效果會和預想的不一樣(預想的就是把別名替換為所指代的內容,再判斷其資料型別)。
a
的型別為char *
,很自然,因為宣告時只用到了別名。
分析cstr1
,從物件往指標分析:首先是常量char,然後是指標。
分析cstr
,與cstr1
的區別只是使用了別名,但效果和預想的不一樣。從物件往指標分析:首先是char,然後是常量指標。
分析ps1
,從物件往指標分析:首先是常量char,然後是一級指標,然後是二級指標。
分析ps
,與ps1
的區別只是使用了別名,但效果和預想的不一樣。從物件往指標分析:首先是char,然後是一級常量指標,然後是二級指標。
總結:const會直接修飾到型別別名指代的指標上去,而不會修飾到底層的物件本身上去。
將第一句替換為using pstring = char*
,和上面效果是一樣的。
因為define只是簡單的巨集文本替換,所以這裡的效果肯定會和預想的一樣了。
但需要注意下面這個坑:(在一條語句中定義多個變數,符號&和*只屬於某個宣告符,而非資料型別的一部分)
#define ptype int*;
ptype p1,p2;
// 即int* p1, p2; p1為指標,p2是個int值
typedef
int* p
ptype p1,p2;
//即int* p1, int*p2; p1, p2都是指標
const與define的組合效果就不試了。 C 指標 常量和型別別名
在 c primer 61頁看到這個,有點繞。typedef char pstring const pstring cstr 0 cstr 是乙個指向char 型別的常量指標?const pstring ps ps首先是乙個指標。並且它指向的是乙個char型別的常量指標我看到第二行的時候,當時的反應...
指標 常量和型別別名
今天看了c primer的2.5.1的一點小理解。如果某個型別的別名指代的是復合型別或是常量,那麼它用到宣告語句裡面就會產生意想不到的後果,例如下面的宣告語句用到了型別pstring,它實際上是型別char 的別名 typedef char pstring const pstring cstr 0 ...
Go No nil 型別別名
為型別起個別名,方便 編寫過程中使用。type alias ttype 關鍵字 alias 型別別名 t 型別 例如資料型別中提到的unicode字元型rune和ascii字元型byte就是型別別名 type rune int32 type byte uint8在 go 中有一些基本的資料型別,如s...