1樓:卯問玉
指標變數可以指向一維陣列中的元素,也可以指向多維陣列中的元素。但在概念和使用上,多維陣列的指標比一維陣列的指標要複雜。
1、二維陣列的地址
二維陣列可以理解為一個廣義的一維陣列,一個以一維陣列為元素的一維陣列。例如定義一個陣列:
int a[3][4]=;
則陣列a對應的元素為:
a[0][0] a[0][1] a[0][2] a[0][3] …… 第0行
a[1][0] a[1][1] a[1][2] a[1][3] …… 第1行
a[2][0] a[2][1] a[2][2] a[2][3] …… 第2行
現在將第0行陣列元素a[0][0]、a[0][1]、a[0][2]、a[0][3]組成陣列a[0],第1行陣列元素a[1][0]、a[1][1]、a[1][2]、a[1][3]組成陣列a[1],第2行陣列元素組成陣列a[2],則a[0]、a[1]、a[2]就是一維陣列名,代表一個地址常量,分別指向每行的第0列元素,如圖 7 7和圖 7 8所示。那麼a[0]+1指向第0行的第1個元素,a[1]+1指向第1行的第1個元素,所以稱a[0]、a[1]、a[2]為列指標,對它們的增減1將移動1列元素。
圖 7 8 二維陣列中元素地址示意圖
對於二維陣列a來說,還可以把它看成是由a[0]、a[1]、a[2]這些「元素」組成的一維陣列,如圖 7 8所示。而a[0]、a[1]、a[2]又是由4個int型元素組成的陣列,所以a+0指向a[0]陣列的首地址(第0行元素的首地址),a+1指向a[1]陣列的首地址(第1行元素的首地址),那麼a+i指向第i行的首地址,所以a被看成是一個行指標,指標a的基型別是一個由4個int型資料構成的陣列。
由於a指向a[0],a+1指向a[1],所以*a等價於a[0],*(a+1)等價於a[1],*(a+i)等價於a[i],行指標*運算得到列指標。而a[0]+1指向第0行的第1個元素,a[1]+1指向第1行的第1個元素,那麼*(a[0]+1)等價於a[0][1],*(a[1]+1)等價於a[1][1],*(a[i]+j)等價於a[i][j],列指標*運算得到二維陣列的元素值。而a[i]又等價於*(a+i),所以*(a[i]+j)與*(*(a+i)+j)等價,都表示二維陣列元素a[i][j]。
對於二維陣列a[m][n]中的任意一個元素a[i][j],其地址可以表示為:
(1)&a[i][j],
(2)&a[0][0]+i*n+j,
(3)a[i]+j等價於*(a+i)+j
(4)a[0]+ i*n+j
對於二維陣列a[m][n]中的任意一個元素a[i][j],還可以表示成等形式。
通過陣列元素的地址來引用二維陣列元素。
#include
#include
int main()
{ int i,j;
int a[3][4]=;
cout<<"輸出二維陣列a:"<
int main()
{ int i,j;
int a[3][4]=;
int (*p)[4]; //定義一個指向一維陣列(有4個整型元素)的指標變數
p=a;
cout<<"請給出輸出元素的下標值:"<>i;
cout<<"列標號:";
cin>>j;
cout<<"a["<
列標號:2
a[1][2]=7
2樓:韌膽
這是一個3行4列 的2維陣列 陣列 是給第一行的第一二個元素賦值 ,這行其餘兩個元素都賦0 ,後面兩行都是如此,樓上的說好著呢,樓主放心採納
3樓:爬爬不慢
就是給a[0][0]、a[0][1]、a[0][2]分別賦了三組值,其餘全部由int預設為(0,0)了。
4樓:
int a[3][4] =,,};
陣列a[3][4]是3組4個值的陣列。
a[0][0] =1;
a[0][1] =2;
a[1][0] =6;
a[1][1] =5;
a[2][0] =9;
a[2][1] =1;
5樓:
相當於是:a[3][4]=,,};
6樓:柳亦隨風
1200
5600
9100
7樓:匿名使用者
a[3][4]=,,};
int a[][5]={{1,2,3},{4,5,6}}是什麼意思
8樓:匿名使用者
int a[5]
建立一bai個二維陣列 元素型別為duint 型 其大小為n*5 (共有
zhin行
dao 每行5個元素) n的值有其版後初始化權序列決定
初始化序列為
,}所以n為2
即定義2行5列的二維陣列
其每個元素值為
1 2 3 0 0
4 5 6 0 0
ps:陣列元素如果部分定義,未定義部分元素自動賦值為0
j**a二維陣列int[][]a={{1,2,3,},{4,5,6},{7,8,9}}什麼意思,
9樓:卑微丶過客
二維陣列可以看成一個**,一個**可以有任意行和列
,,表示**的行,不是二版維就只有權2行,可以任意行1,4,7表示第一列,2,5,8表示第二列,3,6,9表示第三列通過行和列就可以獲得該位置的元素,比如第三行第二列元素a[2][1]的值是8(下標是從0開始的)
10樓:匿名使用者
二維陣列的含義是指:每個陣列的成員都是另一個同型別的一維陣列;因此,,}表示內最外層的陣列有三容個成員,這三個成員均為一維int型的陣列,第一個成員是,第二個成員是,第三個成員是。當然還可以有第四個、第五個或更多成員。
11樓:藍風水晶靈
我想這抄樣寫你就會明白了
inta=,,}
inta=,,}
一個int型陣列a[4]:&a+1和&(a+1)的區別
12樓:匿名使用者
首先,在int型陣列a[4]中,a是陣列指標,代表了a[0]的地址,陣列指標a本身沒有儲存空間,所以不能用&來取a的地址,使用&a返回的地址值也是a[0]的地址;同樣也不能使用a++或a=a+2之類的賦值語句對陣列指標進行賦值。
所以你這個問題中&a+1和&(a+1)是錯誤的用法。
&a+1指向的是陣列a[4]之後的地址空間。
&(a+1)是非法的語句,無法編譯,因為a+1的結果存放在暫存器中,無法取址。
如果你想表達的是取值操作,那應該使用取值操作符*,表示式變為*a+1和*(a+1),這兩個表示式是有區別的:
*a+1表示是先取出a[0]的值,然後對該值加1。
*(a+1)表示的是陣列指標先向下跳一位,然後取出其指向的a[1]的值。
13樓:鎏樂灬緯塍
&a+1指的是在陣列地址是再加一整個陣列的地址
&(a+1)指的是增加一個型別長度的地址
14樓:育知同創教育
&a+1是a的地址加上1,&(a+1)是(a+1)的地址
&是地址運算子和引用運算子
int a[3] [3] ={1,2,3,4,5,6,7,8,9};
15樓:我才是柳隨風
這個二維陣列
實際上是一個有3個元素的一維陣列,其中陣列的元素又是一個有3個元素的一維陣列。
我們先按行優先重新排列一下:
int a[3][3]=
;c和c++中的陣列是從0開始編號的,
第1行:a[0][0],a[0][1],a[0][2]第2行:a[1][0],a[2][1],a[1][2]第3行:
a[2][0],a[2][1],a[2][2]再看你要取的值:a[1][3]在**呢?顯然在a[1][2]之後,但該值已經超出了陣列的界限(陣列有3個元素),即下標溢位了,溢位到了**呢?
因為c/c++中多維陣列(儲存方式)相當於連續的一維陣列,因此,這裡它的溢位位置恰好是a[2][0]所在的位置。
現在可以給你答案了:a[1][3]=7
16樓:匿名使用者
不知道,因為a[0][0]表示第一行第一列,a[0][1]表示第一行第二列
a[1][0]表示第二行第一列,而a[1] [3]表示第二行第四列,而這個陣列是3行3列的,所以不知道a[1] [3]等於多少,沒定義
17樓:今天最慘痛
7a[3][3] 就是3行3列
a[1][3] 就是第2行第4列(因為陣列下標是從0開始記的),但是陣列裡沒有第4列,順著往下數,就是第3行的第一列,就是7.
18樓:馮益斌
賦值後,a的元素為
1,2,3,4,5,6,7,8,9
4,5,6,7,8,9
7,8,9
a[1] [3]=7
19樓:
0列 1列 2列
0行 1 2 31行 4 5 62行 7 8 9a[1] [3]=6
20樓:匿名使用者
越界了,但是由於二維陣列的線性儲存性質,
a[1][3]可能是a[2][0]這個資料,也就是7
我只能說可能啊,
21樓:匿名使用者
沒有,最多到a【1】【2】
22樓:
輸出值為7.題一點問題都沒。
在c語言中, int a[][5] = {1,2,3,4,5,6,7,8} 是合法陣列宣告,那麼
c語言大神幫忙編寫程式若有二維陣列int a[3][3]={{1,2,3},{4,5,6},{7,
23樓:匿名使用者
#include
int main()
,,};
int i,j,temp;
for(i=0;i<3;i++)
for(j=0;j轉置
bai後du的zhi
矩陣dao為回:答\n");
for(i=0;i<3;i++)
return 0;}
在VBA中如何用陣列給另陣列賦值
通過陣列迴圈的方式進行陣列賦值。示例 dim names 定義一個初始化陣列dim dest 3 定義一個要賦值的陣列 賦值names array 小明 小紅 效力 張明 王武 通過ubound 函式計算上界,lbound計算陣列下界for i lbound dest to ubound dest ...
c語言把int型變數a高位賦值給char型變數b其中
右移操作需要區分有符號右移和無符號右移,無符號數右移時在前面補零,有符號數右移時在前面補符號位 0或1 本題16位int型轉化為8位char型,int型的高8位將被階段,實際傳給char型的數值只有低8位,可以用 b char a 8 實現,加上後面的 有利於 的規整性與可讀性 表明你考慮到了右移操...
c語言陣列賦值問題,c語言中如何給陣列定義並賦初值?
靈凍冰晶霜月 我不清楚你想問什麼,不過第二種寫法是對的。char chars 11 是定義了一個初始值為空總數為11的字元陣列。char s c language 定義一個總數為11的字元陣列,但是有初值。注意是11個不是10個,用這種方定義的字元陣列末尾會加一個 0。陣列的賦值通常是使用花括號來表...