二維陣列a中p a,當 p後為什麼指向的是a

2021-03-11 10:55:41 字數 4490 閱讀 9601

1樓:匿名使用者

a是乙個二級源指標

指向乙個指標陣列,為a[0],a[1],a[2]a[0],a[1],a[2]又分別是指標,指向他們的兒子……所以p=a;++p;

p本來指向a[0]後增一,指向a[1]

a[1]就是a[1][0];

2樓:匿名使用者

(*(p+i)+j) p+i求行下標自j是列bai下標*(dup[i]+j) p[i]是行下標,j是列下標;

*(*(p+i)+j) *(p+i)取行下標,再加j 取列zhi下標元dao素;

p+1 指向a[0][1]

p+3 指向a[1][0]

行優先,先走完第一行,後走第二行。

p+1是a[0][1]

p+3是 a[1][0]這是指標

然後 a的話就是指向第一行 a+1是指向第二行 a+2是指向第三行意思是說

p+1=a[0][1]

p+3=a[1][0]

然後賦值的話 p=a 相當於a[0][0]p=a+1 相當於 a[1][0]

p=a+2相當於 a[2][0]

3樓:無風無雲的海角

沒有啊!

++p後是

襲指向a[1][0];

*p+1是行指標變列指標後,列指標+1;

*(p+1)是行指標+1後變為列指標;

#include

int main()

;int (*p)[3];

p=a;

++p;

printf("%d\n",*(*p));

return 0;}

c++中有二維陣列a[3][3],指標p指向&a[0][0]那麼請問p[1]表示什麼啊?

4樓:子非退而結網

二維陣列如:

a[3][3];

a[0] = ;

a[1] = ;

a[2] = ;

p指向二維陣列;

p[1] == a[1]

<9;i++) *(p+i)=i+1; printf("%d \n",a[1][2]); }

5樓:匿名使用者

#include

main()

其中p=&a[0][0]; 就是取二維陣列的首位址(二維陣列占用的記憶體空間是線性的)

for(i=0;i<9;i++) *(p+i)=i+1; 就是給這個二維陣列賦值,也就是

a[0][0]=0+1,a[0][1]=1+1,a[0][2]=2+1,a[1][0]=3+1,a[1][1]=4+1,a[1][2]=5+1。。。。。。

所以答案是6

6樓:匿名使用者

main()

//輸出結果是6;這裡主要的知識是陣列知識。陣列不管是幾維,在記憶體中都是一維的,這麼說,二維陣列可以認為是這樣一種一維陣列,而這個一維陣列的每乙個元素都是一維陣列,就是這樣。以2維陣列為例,資料其實是按a[0][0],a[0][1],a[0][2],。。。。

a[2][2]儲存的。另外陣列名也是指標,指向陣列的第乙個元素,陣列括號裡面的數就是從首位址偏移的位置。a[3]=*(a+3)就是這個意思。

所以p[i]=*(p+i);也就是從a[0][0]偏移i個元素。而陣列元素按照之前所說順序進行排列。所以可以得出a[1][2]是第6個元素,也就是從a[0][0]偏移了5(a[0][0]是第乙個元素),所以a[1][2]=*(p+5);p[5]=5+1=6;所以a[1][2]=6.

不明白可追問。

7樓:

for(i=0;i<9;i++)

*(p+i)=i+1;

將二維陣列看作一維陣列,a[1][2]即相當於a[5]*(p+0)=1 即a[0]=1

*(p+1)=2 即a[0]=2

*(p+2)=3 即a[0]=3

*(p+3)=4 即a[0]=4

*(p+4)=5 即a[0]=5

*(p+5)=6 即a[0]=6

若有定義:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},(*p)[4];p=a; ,( )對陣列a元素的引用是正確的。

8樓:處搖胼手胝足

a。a陣列的長度是3,*(p[4])和**(p+4)都會造成超出位址範圍

(**p)[2]表達不正確

*(p[2]+3) 是a[2][3];

9樓:匿名使用者

int (*p)[4];表明p是行指bai針,即p指向二維陣列中的一du行。zhi

p=a;這一句表示

daop指向a[0],也就是

版指向a陣列第0行的第0個元素權

(a[0][0])的位址。

p[2]表示p指向a陣列的第二行,即指向a[2]行,也就指向a[2][0]的位址。

p[2]+3表示行指標指向a陣列的第二行(從第0行開始),(從0開始)第3個元素,也就是a[2][3],*(p[2]+3)表示第2行,第3個元素的值。

p+4表示第四行(從0行開始),因為a陣列沒有第四行,所以是錯的。

p[4]表示第四行(從0行開始),原因同上。

*p表示a陣列第0行,第0列位址,**p表示a[0][0]的值,值不會再包含元素,所以(**p)[2]是錯的。

二維陣列與指標,有如下定義, char a[3][3],*p;p=a; 為什麼a[0]+1指a[0][1]

10樓:匿名使用者

a是行指標,a[0]是指向a[0][0]的陣列元素指標,所以根據指標加整數的定義,只能是指標後移乙個相應型別

int a[2][3] ,*p[3] ,p=a為什麼是錯的 p[o]=a是對的

11樓:匿名使用者

語句整理如下:

int a[2][3] ,*p[3];

/*a[2][3]二維陣列;*/

/*p[3]指標陣列(注意:不是陣列指標)*/a可以作為位址

12樓:黃邦勇帥哥哥

要想使抄p=a正確,請使用

襲int (*p)[3];的宣告,該語句表bai示,指標p是乙個指向含有三個元du素的zhi一維陣列dao的指標。而a[2][3]中的陣列名a,表示的是指向二維陣列第一行中含有3個元素的陣列的指標,因此可以對其賦值。陣列名不是像一樓說的a是指向的a[0][0],而是指向的a[0]也就是說a表示的是a[0]的位址&a[0]。

因為a=a+0,因此a+1指向的是a[1]的位址,即&a[1]。指向a[0][0]的是a[0]也就是說a[0]本身就是乙個位址,你可以輸出a[0]就知道了。而*a[0]就能輸出a[0][0]的值。

即a[0]指向的是&a[0][0]

*p[3]表示的是宣告的乙個指標陣列,在這個陣列中的每乙個成員都是乙個指向int型的指標,因此只能對p[0]賦於int型變數的位址,比如int i=1; 則可以使用p[0]=&i來賦值。同樣可以使用p[0]=a[0];或者p[0]=&a[0]

若有定義語句int a[2][3],*p[3]那麼為什麼p[0]=a;語句不對?

13樓:

看*p[3]這部分,由於右結合性,所以p首先是乙個陣列,然後它才是乙個指標,所以他是3個指標,而不是「指向帶有三個元素的陣列」的指標。

所以p[0]=a;是錯誤的

應該這樣寫:

int a[2][3],(*p)[3];

p=a;

這樣是正確的

14樓:匿名使用者

int a[2][3]是二維陣列

int *p[3]是一維

指標陣列,意思是由3個一維指標組成的陣列,其中p[0],p[1],p[2]是3個一維指標

所以就很明顯了,a是二維的,p[0]是一維的,不可以賦值如果是二維指標,如:int **p; 那麼p=a;就是正確的

15樓:匿名使用者

p[0]=a??這怎麼看都是錯誤的!!

指標是比較難理解的。

你要分清 指標和陣列的關係, 指標陣列的概念。

int a[2][3]=;

如果你定義 int *p 怎樣使用p訪問此多維陣列的值呢?

這種情況 p的初始化是:p =a[0];

訪問陣列的得**是:

int *p;

for(p =a[0];p錯誤,a是乙個整型位址p = &b //錯誤,&b是乙個 int[4]的位址p = &a //正確

所以用 int (*p)訪問一位維陣列的**如下:

int a[3] =;

int (*p)[3];

p = &a;

int i;

for(i=0;i<3;i++)

cout<<*((*p)+i)<

c語言 二維陣列指標中的和,C語言 二維陣列指標中的 和

要回答你的這個問題,不妨先根據你的問題先編寫一段小的示例程式 include include using namespace std int a 3 4 int main 這段示例程式在我本地上執行的結果為 a i 0 4214816 a i 4214816 a i 4214816 a i 0 42...

c程式中如果p指向某二維陣列的某個元素那麼pi是

無論幾維陣列,只要指標p已經指向了某個元素,那麼p i 就是第i個元素值 i從0起算 當然i有限定的取值範圍。p i 指的是 p i p i 就是指向第i行。p是指向陣列中某個特定元素的指標 那麼p i 與 p i p 有什麼區別?請詳細說明下 謝謝 p i 表示第i個元素的指標,其值為第i個元素的...

為什麼C語言中二維陣列的陣列名a和a表示的是同值

當定義二維陣列a m n 時,陣列名可以認為是二維指標,其指向二維陣列的首位址。於是a的值就是首位址的值。而 a,就是a 0 a 0 是第一行的標記,代表第一行的首位址。在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首位址,第一行的首位址,和第乙個元素的首位址,即a,a 0 a 0 0 都是相...