關於C語言中二維陣列的P 1與 (P 1)個人淺見

2021-07-04 19:24:51 字數 948 閱讀 9158

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

在c語言中,有很多資料型別(int、float、char...),那麼陣列是一種構造型別的資料,個人認為陣列是一組具有相同資料型別的資料集合。目前,我們常見的陣列為一維、二維的陣列。

本文以二維陣列為題,首先,我們看一段**

通過**,我們知道*(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];

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

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

c語言中二維陣列的傳遞

c語言中經常需要通過函式傳遞二維陣列,有三種方法可以實現,如下 方法一,形參給出第二維的長度。例如 include void func int n,char str 5 void main func 3,str 方法二,形參宣告為指向陣列的指標。例如 include void func int n,...

C語言中二維陣列和指標

a或 a 1 行位址 a i 行位址加列位址test 如下所示 include int main void 第一行位址 printf p,p,p,p n nums,nums 0 nums,nums 0 第二行位址 printf p,p,p,p n nums 1,nums 1 nums 1 nums ...

c 中二維陣列與二維向量的長度

對於乙個二維陣列 int mm 3 5 int toatlnums sizeof mm sizeof int 元素總個數 int cols sizeof mm 0 sizeof int 行 int raws totalnums cols 列對於乙個二維向量 vector matrix int raw...