關於C語言中二維數組的P+1與*(P+1)個人淺見

    本人第一次在51CTO上發表博客,可能會有一些錯誤,希望各位大神多多指點!好了,閒言少續,我們進入主題:

    在C語言中,有很多數據類型(Int、Float、Char...),那麼數組是一種構造類型的數據,個人認爲數組是一組具有相同數據類型的數據集合。目前,我們常見的數組爲一維、二維的數組。 本文以二維數組爲題,首先,我們看一段代碼 !

wKioL1XaxUPBURHEAAJyT60hMuw905.jpg

    通過代碼,我們知道*(P+1),P+1的值是相同的,但含義不同,先說P+1,無論是一維還是二維數組,數組名都可表兩層含義:1、指向其起始元素(a[0])的指針;2、表示自身所佔的內存(sizeof(a));本文主要以第一層含義爲主,二維數組名a,a代表的是二維數組中第一個元素a[0]的地址,即&a[0],而不是數組本身的地址,數組本身地址用(&a)來表示。 由於,有int (*p)[3]=a;說明這個數組指針指向了二維數組中第一個元素(a[0]這個數組),注意是指向,那麼p+1,也就是指向了a[1]這個數組,(p的類型爲int (*)[3]),由此可知,*(p+1)是p+1所指向空間的內容,那麼,這個內容是什麼呢?在二維數組中,運算結果得到了一個一維數組,那麼能夠代表數組整體的只有數組名,一維數組名代表的是其首元素的首地址,而不代表一維數組的地址,也就是&a[1][0],那麼*(p+1)=&a[1][0];

wKioL1XaxWnQ_V4IAAGk8EoEm3k186.jpg

通過,代碼可以看出,推論是正確的。那麼如果想取二維數組中的數值,我們可以再進行一次“*”運算,也就是*(*(p+1))即*(&a[1][0]);如代碼所示 !

wKiom1Xaw2zyJZ-OAAFQeTTCdQI906.jpg

這就是我個人的愚見,如果哪裏有不對的,煩請各位大神指點一二。

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