C 型別別名為指標型別時,const的修飾情況

2021-09-22 21:06:27 字數 1187 閱讀 2848

如果型別別名指代的是復合型別,那麼把它用到宣告語句中產生的效果會和預想的不一樣(預想的就是把別名替換為所指代的內容,再判斷其資料型別)。

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...