c語言二維陣列下標表示方法,C語言二維陣列下標表示方法

2021-05-29 05:28:53 字數 6747 閱讀 8350

1樓:匿名使用者

下標就是在裡的,他是重0開頭的。具體表示如下:

int a[5];//5代表a最後個陣列裡的元素個數

是初學者吧! 要努力喲!

2樓:匿名使用者

int n;

float a[n][n];

都是從0開始到n-1

c語言二維陣列下標的值怎麼算

3樓:v側耳傾聽

陣列的下標是從0開始,由於陣列是連續儲存的,你可以想象用一個4x4的**來表達這個陣列,然後把for迴圈體內語句中陣列對應的下標值根據算術表示式進行計算就可以啦。

for(i = 0; i < 4; i++)s += a[i][1]; // 等同於 s = s + a[i][1];

由這個迴圈語句可知,將陣列a[0][1],a[1][1],a[2][1],a[3][1]的值相加求和。即:

2+6+9+2 =19,其他的陣列下標都可用這種方法來計算。

4樓:匿名使用者

你列印出來,就清楚了啊

書上面都有吧

c語言二維陣列怎麼表示

5樓:匿名使用者

int a[m][n];//就表示一個m行n列的整型二維陣列在c語言中陣列的下標是從0開始的所以,內陣列a的元素個數可以表示為:容a[0][0]-a[m-1][n-1]

例如:#include

int main()

return 0;}/*

執行結果:

1 23 4

4 51 2

3 44 5*/

6樓:匿名使用者

int a[3][2]定義的是陣列bai

裡每個元素du是整數。

初始化zhi賦值可以

int a[3][2]=}

也可以用循dao環的方式

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

for(int j=0;j<2;j++)

a[i][j]=1;//這裡的1只是個例子,自己專要賦什麼就屬什麼。

a[3][2]指的是單個的元素。

7樓:趙宇翔

定義的時候int a[3][2]代表三行兩列的整型陣列

使用的時候是迴圈不到a[3][2]的,三行兩列的整型陣列最多可以訪問到a[2][1],因為陣列下標是從0開始的,切記不要越界哦~

8樓:顏秀英候綾

inta[3][2]定義的是陣列裡每個元素是整數。

初始化賦值可以

inta[3][2]=}

也可以用迴圈的方式

for(int

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

for(int

j=0;j<2;j++)

a[i][j]=1;//這裡版的1只是個例子,自權己要賦什麼就什麼。

a[3][2]指的是單個的元素。

c語言中二維陣列下標問題

9樓:嘟

a可以理解為二重指標,a[0]理解指標,a[0][0]是對這個地址進行訪問了

。其實回[ ]的意義 可以理解成* 。

a[ i ]其實就相當於*(a+i) 所以原答來的就相當於 *(*(a+i)+j) +的優先順序比 *的高 所以外面那個括號可以去掉 就變成了 **(a+i)+j 。

明白了嗎?

10樓:朱豬丹

這裡a指的是整個陣列,而a[0]指二維陣列第一行的元素,a[0][0]指陣列中的第一個元素。

11樓:匿名使用者

a為二重指標,a[0]是指標,a[0][0]是元素,

12樓:匿名使用者

樓上回答的不錯,頂一個。

c語言二維陣列下標負數是什麼意思~? 5

13樓:一口沒水的枯井

1 在c語言中,二維陣列的下標可以為負數,表示指向前面的元素

2 對於二維陣列 int arr[m][n]來說,arr[i][j]的地址是 (*arr)+i*n+j,其值是*((*arr)+i*n+j)

3 分析本題

陣列a在初始化時後,其元素按照在記憶體中的排列順序依次為1,2,3,0, 4,5,6,0, 0,0,0,0

陣列a的第一個元素的地址為*a(或&a[0][0]或a[0]),記為p,

則,a[2][-2]的地址就是 p+2*4+(-2) 即p+6,即指向第7個元素,其值為6;

同理,a[1][3]的地址為p+1*4+3,即p+7,即指向第8個元素,其值為0

所以i的值為6

14樓:窗前過馬

在這裡這不是一個錯誤,但是一般不會寫這樣的程式。

首先應該理解語言中陣列的儲存結構。對二維陣列,在記憶體中實際是按行儲存的,也就是說二維陣列中元素是按行依次儲存在一片連續的的空間中。

取某個元素時,是先通過計算這個元素的地址,再通過計算得來的地址取得該元素的。依然以二維陣列為例,設陣列a[rows][cols](即有rows行,cols列),當訪問a[i][j]的時候,是先通過i,j的值計算得到要取的元素的地址,再在這個地址上取得該值的。計算地址的方法是:

a + i*cols + j, 這裡a就是陣列名,它實際存放著上是這個陣列的每一個元素的地址。

因此,對於您的問題, 可能計算得到a[2][-2]的元素地址為 a+2*4 + (-2) = a + 6 = a + 1*4 + 2

它的地址與元素a[1][2]的地址一樣,也就是說a[2][-2]與a[1][2]實際上是同一個元素。因此輸出6,這是正常的現象。

15樓:匿名使用者

著因該是 錯誤的``````

陣列的下標是從0開始的`````

不可能有 -2;

有什麼不懂 你可以給我簡訊```

16樓:匿名使用者

我想那是一個錯誤,這是明顯的陣列越界~ 學這麼長時間c語言,我從來就沒有見過~

17樓:5舍

確實很奇怪,應該是錯的.

18樓:匿名使用者

應該是寫錯了吧。沒見過這樣的

c語言中二維陣列的指標如何表示

19樓:夜禮服假面

二維陣列和指標

⑴ 用指標表示二維陣列元素。

要用指標處理二維陣列,首先要解決從儲存的角度對二維陣列的認識問題。

一個二維陣列在計算機中儲存時,是按行儲存的,即先儲存第一行的元素,再儲存第二行的元素。

當把每一行看作一個整體,即作為一個大的陣列元素時,原來的二維陣列也就變成一個一維陣列了。而每個大陣列元素對應原來二維陣列中的一行,稱為行陣列元素,顯然每個行陣列元素都是一個一維陣列。

下面討論二維陣列元素和指標之間的對應關係,清楚了二者之間的關係,就能用指標處理二維陣列了。

設p是指向二維陣列a[m][n]的指標變數,若有:p=a[0]; 則p+j將指向a[0]陣列中的元素a[0][j]。

由於a[0]、a[1]┅a[m-1]等各個行陣列依次連續儲存,則對於a陣列中的任一元素a[i][j],指標的一般形式如下:p+i*n+j用"*"運算子表示為:*( p+i*n+j)同樣,a[i][j]也可使用指標下標法表示,如下:

p[i*n+j]

例如,有如下定義:

int a[3][4]=,,};

則陣列a有3個元素,分別為a[0]、a[1]、a[2]。而每個元素都是一個一維陣列,各包含4個元素,如a[1]的4個元素是a[1][0]、a[1][1]、a[1]2]、a[1][3]。

若有:int *p=a[0];

則陣列a的元素a[1][2]對應的指標為:p+1*4+2

元素a[1][2]也就可以表示為:*( p+1*4+2)

用下標表示法,a[1][2]表示為:p[1*4+2]

特別說明:

對上述二維陣列a,雖然a[0]、a都是陣列首地址,但二者指向的物件不同。

a[0]是一維陣列的名字,它指向的是一維陣列a[0]的首元素a[0][0],對其進行「*」運算,得到的是一維陣列元素a[0][0]的值,即*a[0]與a[0][0]是同一個值。

而a是一個二維陣列的名字,它指向的是二維陣列a的首元素a[0],對a進行「*」運算,得到的是一維陣列a[0]的首地址,即*a與a[0]是同一個值。它的指標移動單位是「行」,所以a+i指向的是第i個行陣列,即指向a[i]。

當用int *p;定義指標p時,p的指向是一個int型資料,而不是一個地址,因此,用a[0]對p賦值是正確的,而用a對p賦值是錯誤的。這一點請務必注意。

示例:#include

int main()

,,};

int *p=a[0],max,i,j,row,col;

max=a[0][0];

row=col=0;

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

for(j=0;j<4;j++)

if(*(p+i*4+j)>max)

printf("address of a is:%x\n", (unsigned int)a);

printf("address of a[0] is:%x\n", (unsigned int)a[0]);

printf("address of (a+1) is:%x\n", (unsigned int)(a+1));

printf("address of (a[0]+1) is:%x\n", (unsigned int)(a[0]+1));

return 0;

}執行結果:

a[2][1]=88

address of a is:bfdc0368

address of a[0] is:bfdc0368

address of a[0][0] is:bfdc0368

address of (a+1) is:bfdc0378

address of (a[0]+1) is:bfdc036c

address of (a[0][0]+1) is:bfdc036c

從結果看出,a,a[0],a[0][0]是同一個地址,

⑵ 用二維陣列名作地址表示陣列元素。

另外,由上述說明,還可以得到二維陣列元素的一種表示方法:

對於二維陣列a,其a[0]陣列由a指向,a[1]陣列則由a+1指向,a[2]陣列由a+2指向,以此類推。因此,*a與a[0]等價、*(a+1)與a[1]等價、*(a+2)與a[2]等價,┅,即對於a[i]陣列,由*(a+i)指向。由此,對於陣列元素a[i][j],用陣列名a的表示形式為:

*(*(a+i)+j)指向該元素的指標為:*(a+i)+j陣列名雖然是陣列的地址,但它和指向陣列的指標變數不完全相同。指標變數的值可以改變,即它可以隨時指向不同的陣列或同型別變數,而陣列名自它定義時起就確定下來,不能通過賦值的方式使該陣列名指向另外一個陣列。

示例:求二維陣列元素的最大值。

該問題只需對陣列元素遍歷,即可求解。因此,可以通過順序移動陣列指標的方法實現。

main()

,,};

int *p,max;

for(p=a[0],max=*p;pmax)

max=*p;

printf("max=%d/n",max);

}執行結果:

max=88

這個程式的主要演算法都是在for語句中實現的:p是一個int型指標變數;p=a[0]是置陣列的首元素地址為指標初值;max=*p將陣列的首元素值a[0][0]作為最大值初值;pmax)

}程式執行結果:

a[2][1]=88

⑶ 行陣列指標

對於指標,不管有多複雜,按照以下原則進行分析:

從變數名處起,根據運算子優先順序結合,一步一步分析。

在上面的說明中已經知道,二維陣列名是指向行的,它不能對如下說明的指標變數p直接賦值:

int a[3][4]=,,},*p;其原因就是p與a的物件性質不同,或者說二者不是同一級指標。c語言可以通過定義行陣列指標的方法,使得一個指標變數與二維陣列名具有相同的性質。

行陣列指標的定義方法如下:

資料型別 (*指標變數名)[二維陣列列數];

例如,對上述a陣列,行陣列指標定義如下:

int (*p)[4];它表示,陣列*p有4個int型元素,分別為(*p)[0]、(*p)[1]、(*p)[2]、(*p)[3] ,亦即p指向的是有4個int型元素的一維陣列,即p為行指標。

(按照指標的分析原則進行分析:p先與*結合,說明p是一個指標,然後與結合,說明指標指向的內容是含4個元素的陣列,然後與int結合,說明陣列中的元素為int型別。所以p是一個指向含4個int型別元素的陣列的指標。

)此時,可用如下方式對指標p賦值:p=a;為做對比,比較一下如下指標:int *p[4];

(按照指標的分析原則進行分析:p先與結合,說明p是一個陣列,然後與*結合,說明陣列的元素為指標,然後與int結合,說明指標指向的是int型別的變數。所以p是一個含4個元素的指向int型別變數的指標組成的陣列。

)此外二維陣列不可以用int**型別直接賦值訪問

C語言二維陣列下標越界的一道題目

因為數bai組的第二維維度是3,而a 1 5 的第du二維超zhi過了,最大能取到的2.所以其dao實相當於a 0 2 所以是3 舉個容內易理解的例子容 a 3 3 a 1其實是 a 0 1 a 4其實是 a 1 1 c語言問題,二維陣列的下標越界怎麼看?假設bai這個陣列是連du續記憶體的話,第二...

c語言中二維陣列行指標是什麼,C語言中二維陣列行指標是什麼

就是指向每一行的指標,比如說二維陣列a 2 3 a 0 代表的是二維陣列第零行的首地址相當於 a 0 0 a 1 代表的是二維陣列第一行的首地址相當於 a 1 0 a 0 1代表的是二維陣列第零行,第一列的地址相當於 a 0 1 行指標其實就是二級指標,也就是說它指向一個一維陣列,int a 2 3...

C語言陣列下標,C語言陣列的下標

下標可以是變數 也可以是常量。直接說a 0 a 1 a 2 a 3 這樣的下標就是常量。對於訪問來說,不在意是變數還是常量,系統只是需要一個值,作為偏移量 不管是變數還是常量,訪問的時候 肯定是一個特定值,而系統要的 無非是這樣一個偏移量而已。c語言陣列的下標 樓主你好。注意a是常量,不要被別人誤導...