C_and_CPP 板


LINE

這邊提一下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
1F:→ loveme00835:你都說由右往左, 寫成 char const 比較清楚 11/09 00:19
2F:→ loveme00835:其實寫左邊很容易讓人亂掉, 還以為是修飾右邊 11/09 00:20
3F:→ iamstudent:可能是因為const放左邊比較接近英文吧,所以也很多人寫 11/09 00:27
4F:→ iamstudent:const int xxx; 和 int const xxx; 好像前者較多? 11/09 00:28
5F:推 handsomepow:感謝i大說明 11/09 00:32
6F:→ mythnc:char * p; p is pointer to char 11/09 00:33
已經修正,其實本來是想要打char**p;的
7F:→ akasan:#1B_2w2Uj 看到const 就會想到tinlans這篇好文 11/09 00:46
※ 編輯: iamstudent 來自: 140.113.251.45 (11/09 01:19)
8F:→ loveme00835:我看了《C++ Templates》之後, 一律把const擺右邊 11/09 01:26
9F:推 xatier:Deep C Secrets 那本有超多外星密技的! 11/09 02:40
10F:推 Favonia:http://cdecl.org/ 11/09 13:19
11F:推 hilorrk:san大跟我想到同一篇神文XD 11/09 22:29
12F:推 xatier:F大的網站....\("▔□▔)/ 11/10 00:22
13F:推 Arton0306:推 看了這篇我才知道要怎麼解讀一長串的宣告 11/10 23:23







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP