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

2021-03-04 03:11:35 字數 3039 閱讀 6017

1樓:嘟

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

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

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

明白了嗎?

2樓:朱豬丹

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

3樓:匿名使用者

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

4樓:匿名使用者

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

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

5樓:一口沒水的枯井

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

6樓:窗前過馬

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

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

取某個元素時,是先通過計算這個元素的地址,再通過計算得來的地址取得該元素的。依然以二維陣列為例,設陣列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,這是正常的現象。

7樓:匿名使用者

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

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

不可能有 -2;

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

8樓:匿名使用者

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

9樓:5舍

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

10樓:匿名使用者

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

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

11樓: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,其他的陣列下標都可用這種方法來計算。

12樓:匿名使用者

你列印出來,就清楚了啊

書上面都有吧

c語言,二維陣列的下標問題問題 10

13樓:008列出

前者可定義的前bai提是給出了全部或部分du元素的zhi值,如arr[100]=,這個時候由於定dao義了列回數,系統會自動在第100個數

答之後換行,而arr[100]=的話就之定義了行數,至於第一行在何處換行就不知道了,因為列寬不知道。

為什麼在c語言中二維陣列第二維下標可以越界?

14樓:匿名使用者

因為陣列是連續儲存的,所以a[0][3]就是第四個儲存的資料,你可以試試a[0][4]..

15樓:匿名使用者

越界復是肯定的,但是越界不代表程

制序會出

bai錯,你這個地方越界du後訪問的正好是下一個元素4,是zhi一個dao有效值,所以不會出錯。可以試試訪問a[3][3],這個時候不一定會訪問到什麼東西,這時就很容易出現記憶體破壞,會提示記憶體不可訪問之類的吧

16樓:匿名使用者

不是能越界,c中陣列時從0開始算起的。你是a[3][3],想要顯示對應元素時,就應做相應變換,例版如顯示權

第2行第3列元素(即6),就要寫printf("%d ",a[1][2]);,你寫a[0][3]按照3維陣列來說,沒有這個元素,這時c語言內的編譯器就自動把這個三維陣列預設成一個一維陣列,他顯示的是這個以為陣列的第4個數,即4

17樓:幻夢の初

相當於一維陣列的第四個元素

哥們,往大了試,a[0][9]你試試

18樓:大心星

假設這個陣列是連續記憶體的話,第二個下標越界第一個不越界,那這個內地址還是有可能落在這個二維數容組的記憶體範圍內的,但是你第一維最後元素的第二維下標越界試試? 那就跑出這個陣列的記憶體範圍了,誰這麼明確告訴你可以越界了?

int a[5][5];

a[5][6]=0;

這麼寫或許編譯不報錯,但是你修改了莫名其妙地址上的資料,要麼崩潰要麼出錯...這樣是不可取的

c語言二維陣列與指標運算,C語言二維陣列與指標運算

在 p 4 中p是指向一個有4 個int元素的一維陣列的首地址,int p 4 a就相當於int p 4 p a 兩個語句,所以 p i 指向i行地址,p i c 指向i行c列的地址即a i c int p 4 a 表示指向一維陣列 4列 的指標,然後a 0 地址給了p,p i就表示a i 的地址....

c語言中二維陣列它的陣列名是a那a和a有什麼

對於二維陣列名a和 a,二者的區別在於型別不同。對於type a m n 當使用a時,可以等同於二級指標type 型。而使用 a時,等同於type 型。從概念上說,a表示二維陣列a的首地址,而 a表示二維陣列a第一行a 0 的首地址。這樣在使用的時候就有所區別。比如 對a的操作a 4 表示a的第四行...

C 函式呼叫二維陣列,C語言一維陣列轉二維陣列

n如果是變數的話,陣列編譯時都通不過吧。陣列分配時必須知道大小。函式應該這樣宣告function char array 10 10 或省略第一維的大小function char array 10 function char array n n 這樣是錯誤的,陣列的索引必須是個常量表示式。如果需要必須...