Re: [問題] const問題
這邊提一下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
11/09 00:19, 1F
→
11/09 00:20, , 2F
11/09 00:20, 2F
→
11/09 00:27, , 3F
11/09 00:27, 3F
→
11/09 00:28, , 4F
11/09 00:28, 4F
推
11/09 00:32, , 5F
11/09 00:32, 5F
→
11/09 00:33, , 6F
11/09 00:33, 6F
已經修正,其實本來是想要打char**p;的
→
11/09 00:46, , 7F
11/09 00:46, 7F
※ 編輯: iamstudent 來自: 140.113.251.45 (11/09 01:19)
→
11/09 01:26, , 8F
11/09 01:26, 8F
推
11/09 02:40, , 9F
11/09 02:40, 9F
推
11/09 13:19, , 10F
11/09 13:19, 10F
推
11/09 22:29, , 11F
11/09 22:29, 11F
推
11/10 00:22, , 12F
11/10 00:22, 12F
推
11/10 23:23, , 13F
11/10 23:23, 13F
討論串 (同標題文章)