Re: [問題] const問題

看板C_and_CPP作者 (stu)時間13年前 (2011/11/08 16:11), 編輯推噓6(607)
留言13則, 9人參與, 最新討論串2/4 (看更多)
這邊提一下c的變數宣告處理規則 當c看見一個變數宣告時 他的判斷方式其實是由內往外的 下面有一個把變數宣告轉換為英文的方法 參考自書籍 Expert C Programming Deep C Secrets, Peter Van Der Linder, page76 步驟1 發現一個變數,輸出"xxx is " 步驟2 看右邊有無"[...]"。 若有,輸出字串"array of ",然後跳到步驟4 步驟3 按右邊有無"(...)"。 若有,輸出字串"function return " 步驟4 往左邊看有無'('。 如果可以成對群組起來就丟掉,跳到步驟2 步驟5 看左邊有無"const"。 如果有,就輸出 "read only ",跳到步驟4 步驟6 看左邊有無'*'。 如果有,輸出 "pointer to ",跳到步驟4 步驟7 發現基本型態。直接輸出該型別 這邊demo一下 我不會改顏色 所以用上一行的底線來標記處理區域 ____ char * const *(*next)(); 執行步驟1,輸出"next is a ..." _____ char * const *(* )(); 執行步驟2往右找,沒發現中括號。不是array 步驟3,沒發現右邊有(...)。也不是function ______ char * const *(* )(); 開始往左找 步驟4、5也都比對失敗 步驟6,左邊有星號,所以輸出變成 "next is a pointer to ..." _______ char * const *( )() 步驟2 3比對失敗 步驟4發現成對小括號,拿掉 _________ char * const * () 步驟2失敗 步驟3,發現右邊有() 輸出變為 "next is a pointer to function return .." _ char * const * 步驟2 3 4 5 都失敗 步驟6發現左邊有* 輸出:"next is a pointer to function return pointer to ..." _____ char * const 步驟 5 發現有const 輸出:"next is a pointer to function return pointer to read-only ..." _ char * 步驟6發現* "next is a pointer of function return pointer to read-only pointer to ..." ____ char 步驟7發現char "next is a pointer of function return pointer to read-only pointer to char." ----------------------------------------------------------------------------- 這邊有一個習題 char *(*c[10])(int**p); 解讀出來應該是 c is array[10] of pointer to function return pointer to char ----------------------------------------------------------------------------- 最簡化的記法 如果不考慮array與function 只看最後面幾個步驟的說明 const修飾指標的解讀一律都是右邊往左 所以 char * p; p is pointer to char. const char * p; p is pointer to char read-only. char const * p; p is pointer to read-only char. (和上面一樣) char * const p; p is const pointer to char. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.210.62

11/09 00:19, , 1F
你都說由右往左, 寫成 char const 比較清楚
11/09 00:19, 1F

11/09 00:20, , 2F
其實寫左邊很容易讓人亂掉, 還以為是修飾右邊
11/09 00:20, 2F

11/09 00:27, , 3F
可能是因為const放左邊比較接近英文吧,所以也很多人寫
11/09 00:27, 3F

11/09 00:28, , 4F
const int xxx; 和 int const xxx; 好像前者較多?
11/09 00:28, 4F

11/09 00:32, , 5F
感謝i大說明
11/09 00:32, 5F

11/09 00:33, , 6F
char * p; p is pointer to char
11/09 00:33, 6F
已經修正,其實本來是想要打char**p;的

11/09 00:46, , 7F
#1B_2w2Uj 看到const 就會想到tinlans這篇好文
11/09 00:46, 7F
※ 編輯: iamstudent 來自: 140.113.251.45 (11/09 01:19)

11/09 01:26, , 8F
我看了《C++ Templates》之後, 一律把const擺右邊
11/09 01:26, 8F

11/09 02:40, , 9F
Deep C Secrets 那本有超多外星密技的!
11/09 02:40, 9F

11/09 13:19, , 10F
11/09 13:19, 10F

11/09 22:29, , 11F
san大跟我想到同一篇神文XD
11/09 22:29, 11F

11/10 00:22, , 12F
F大的網站....\("▔□▔)/
11/10 00:22, 12F

11/10 23:23, , 13F
推 看了這篇我才知道要怎麼解讀一長串的宣告
11/10 23:23, 13F
文章代碼(AID): #1EkLIycp (C_and_CPP)
討論串 (同標題文章)
完整討論串 (本文為第 2 之 4 篇):
問題
7
45
問題
5
9
問題
6
13
問題
文章代碼(AID): #1EkLIycp (C_and_CPP)