註冊登錄
伊莉討論區返回首頁

thelord2009的個人空間http://www28.eyny.com/?5788411[收藏][複製][分享][RSS]

日誌

指標與陣列間的關係詳解Part-II(二維陣列指標可能要這樣才說得通) ...

已有 625 次閱讀2023-1-4 01:40 PM

導讀
指標與陣列間的關係詳解

依照
C最強入門邁向頂尖高手之路王者歸來
告訴我們:
頁數11-4
如果num是一個一維陣列
&num[0]相當於num
&num[1]相當於num+1
&num[n]相當於num+n
意思是
從0開始編號的編號0的num[0]有個&,所以&num[0]代表編號0的num[0]的位址,由於是編號0是第一個,可以直接用num表示
所以
編號1的num[1]有個&,所以&num[1]代表編號1的num[1]的位址,由於num代表位址,用num+1表示代表位址的加法運算

之前提到的
由於最外面的*號是依址取值的意思
所以二維陣列的*(*(num+m)+n)是依址取值的意思,最外面的*號裡頭的就是指向位址,因此*(num+m)+n則是代表指向位址。】

最外面的*號裡頭的就是指向位址,因此*(num+m)+n則是代表指向位址
可是
*(num+m)的*不是應該是依址取值,那怎麼可以用*(num+m)+n則是代表指向位址?
如果num是一維陣列
*(num+m)的最外面的*號裡頭的就是指向位址,因此num+m就是上方講的用num+1表示代表位址的加法運算
可是如果num是二維陣列
而最外面的*號裡頭的就是指向位址,因此*(num+m)+n則是代表指向位址代表可能,編譯器會給最外面的*號裡頭的內容添加一個取位址的符號&,因此二維陣列最外面的*號裡頭的用*(num+m)+n表示,添加了符號&以後變成&*(num+m)+&n,取址&和取值*會抵消,於是裡頭的就變成(num+m)+&n因此必須用*表示*(num+m)】,就相當於上方講的&num[1]相當於num+1,所以(num+m)+&n就是把一維陣列位址(num+m)往右推一個&n位址(相當於一行兩行的行,也就是縱向的欄位。)

這個講法應用在上方一維陣列就變成
*(num+m)的最外面的*號裡頭的就是指向位址,編譯器會給最外面的*號裡頭的內容添加一個取位址的符號&,因此一維陣列最外面的*號裡頭添加了符號&以後變成&num+&m,代表取&num的位址+一個推移&m。

路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelistdoodle 塗鴉板

您需要登錄後才可以評論 登錄 | 註冊
驗證問答 換一個

Archiver|手機版|廣告|聯絡我們|廣告查詢|廠商合作|伊莉

GMT+8, 2024-5-23 09:05 PM

回頂部