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)< 要回答你的這個問題,不妨先根據你的問題先編寫一段小的示例程式 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... 無論幾維陣列,只要指標p已經指向了某個元素,那麼p i 就是第i個元素值 i從0起算 當然i有限定的取值範圍。p i 指的是 p i p i 就是指向第i行。p是指向陣列中某個特定元素的指標 那麼p i 與 p i p 有什麼區別?請詳細說明下 謝謝 p i 表示第i個元素的指標,其值為第i個元素的... 當定義二維陣列a m n 時,陣列名可以認為是二維指標,其指向二維陣列的首位址。於是a的值就是首位址的值。而 a,就是a 0 a 0 是第一行的標記,代表第一行的首位址。在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首位址,第一行的首位址,和第乙個元素的首位址,即a,a 0 a 0 0 都是相...c語言 二維陣列指標中的和,C語言 二維陣列指標中的 和
c程式中如果p指向某二維陣列的某個元素那麼pi是
為什麼C語言中二維陣列的陣列名a和a表示的是同值