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

時間 2021-07-21 03:29:33

1樓:興堅成後文

假設這個陣列是連續記憶體的話,第二個下標越界第一個不越界,那這個地址還是有可能落在這個二維陣列的記憶體範圍內的,但是你第一維最後元素的第二維下標越界試試?

那就跑出這個陣列的記憶體範圍了,誰這麼明確告訴你可以越界了?

inta[5][5];

a[5][6]=0;

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

2樓:麴飛睢可

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

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

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

C語言陣列下標越界問題,C語言二維陣列下標越界問題

光輝歲月 首先 陣列下標是從0開始的 所以a 的下表是從0 9的,即a 10 a 9 是錯誤的。a指的是a 9 後面的那個儲存單元的的數值。其次 void fun int a,int n,int m 這個j是多餘的。 void fun int a,int n,int m 第一個括號是全形的括號!還有...

C語言二維陣列的排序問題,c語言二維陣列

不是。這麼說吧,陣列名本身就是指標,指向陣列的第一個元素。至於你所說的呼叫呼叫二級 二維吧 陣列,難道不是如普通變數般直接呼叫嗎?根據問題補充說,這是不允許的,main 函式的形參是固定的不能傳遞指標。而一般的自定義函式只能用傳遞首地址的形式來傳遞二維陣列,例子如下 定義 int a x y int...

C語言下標越界問題,c語言問題,二維陣列的下標越界怎麼看?

這個跟系統有關係。如果陣列越界是否破壞了原來的函式呼叫棧,或者訪問到了不可訪問的地址,或者寫了只有讀許可權的地址,那肯定會出錯了。但是如果你的陣列的越界只是訪問到了原本就沒有被分配的記憶體,那麼就不會出錯,但是不能保證這麼下去一直不會錯。 淦海瑤 越界有危險,但是沒有辦法判斷, 於夜漆雕騫騫 第二個...