指向數組指針的數組

實現一個程序時,想要寫出“指向數組指針的數組”的聲明。完整地說,我想聲明一個3元素數組,元素類型爲“指向char[64]的指針”。


爲什麼想指定數組維度?比如arr是這個指針數組,如果能聲明維度,*arr[0]的類型就是“char[64]”,sizeof(*arr[0])就能獲得數組的長度。


一下還寫不出來,嘗試幾番,總算讓sizeof(*arr[0])返回64了。聲明的樣子是:


char (*arr[3])[64]


以前以爲看完C語言專家編程關於聲明的那些內容,就不會被類似問題難住。其實,還是很少自主去思考這些東西。這個聲明的意思是,arr是個3元素數組,元素類型是指針,指針類型是char[64]。即指向char[64]指針的數組。


如果不要括號就成了,arr是個3元素數組,元素類型是64元素數組,此64元素數組裏的元素類型是指針,指針指向的類型是char。


不同之處是,3元素數組裏元素類型改變了。聲明裏[]比*的優先級高,不括起來的話,元素類型就是[]而不是*了。


如果改變一下括號:


char (*arr)[3][64]就成了,素數arr是一個指針,指針指向的類型是某個3元組,3元素數組之元素類型爲某64元素數組,64元素數組之元素類型爲char。


三種情況依次是,“指向數組指針”的數組,“char*指針數組”的數組,指向“char數組的數組”的指針。


聲明倒是做出來了,結果用的時候警告不斷:大部分函數都是要char*,而傳入的是char(*)[64]。


C語言的類型系統果然蛋疼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章