1樓:光輝歲月
首先:陣列下標是從0開始的;所以a【】的下表是從0…9的, 即a[10]=a[9]是錯誤的。a指的是a[9]後面的那個儲存單元的的數值。
其次:void fun( int a, int n, int m)
這個j是多餘的。
2樓:
void fun( int a, int n, int m)
第一個括號是全形的括號!!!
還有陣列訪問越界 編譯器是不提示的
3樓:匿名使用者
c++中,並不會自動檢查下標越界問題。
第一個程式中,a[10]=a[9],改變了不屬於陣列空間的記憶體單元。這個錯誤不會在編譯和連線中反應出來,而是會一直執行下去,知道出現結果不正確。嚴重時可能導致宕機。
第二個程式也是同樣道理,陣列a只申請了三個整形的記憶體空間,越界的部分修改了記憶體中原來的資料。不過在這裡編譯會報錯。
要保證不破壞其他儲存空間中的資料只能說自己注意了。
4樓:
for ( i=m ; i>=n ; i-- ) a[i+1]=a[i] ;
這句話有錯。i =9時 i+1就是10;你定義的陣列只有10個元素。a[i+1]是啊a[10]是第十一個元素。陣列下標越界。
5樓:匿名使用者
明明知道是錯了 何必去研究這些錯誤的問題呢?至於如何保證a[10]就沒有破壞其他儲存空間中的資料呢??將 #define n 10 改為#define n 11 就可以了!
最後輸出應該為 12334
c語言二維陣列下標越界問題;
6樓:我和芯萪娘貼貼
因為c語言會把陣列中未賦值的值賦值為0
int a[3]=,,};
等價於int a[3]=,,};
所以a[1][2]為0
7樓:慕欣可
例如 int a[10]; 這是一個整型的陣列a,有10個元素:a[0]-a[9],因為正確的下標應該是從0開始,到9結束,與生活習慣中的1-10不一樣,a[10]是不存在的 如果你使用a[10] 於是產生一個a[10]的錯誤,即陣列下標越界。c和c++語言中陣列下標越界,編譯器是不會檢查出錯誤的,但是實際上後果可能會很嚴重,比如程式崩潰等
c語言下標越界問題
8樓:匿名使用者
這個跟系統有關係。
如果陣列越界是否破壞了原來的函式呼叫棧,或者訪問到了不可訪問的地址,或者寫了只有讀許可權的地址,那肯定會出錯了。
但是如果你的陣列的越界只是訪問到了原本就沒有被分配的記憶體,那麼就不會出錯,但是不能保證這麼下去一直不會錯。
9樓:淦海瑤
越界有危險,但是沒有辦法判斷,
10樓:於夜漆雕騫騫
第二個迴圈條件寫錯了吧
迴圈裡i只要小於等於6就會死迴圈了
比如第一次i為零時就會一直讓j自增跳不出迴圈自然了j大過陣列下標最大值時就越界了
關於c語言陣列引用下標越界問題,希望個大神幫忙解答!
C語言下標越界問題,c語言問題,二維陣列的下標越界怎麼看?
這個跟系統有關係。如果陣列越界是否破壞了原來的函式呼叫棧,或者訪問到了不可訪問的地址,或者寫了只有讀許可權的地址,那肯定會出錯了。但是如果你的陣列的越界只是訪問到了原本就沒有被分配的記憶體,那麼就不會出錯,但是不能保證這麼下去一直不會錯。 淦海瑤 越界有危險,但是沒有辦法判斷, 於夜漆雕騫騫 第二個...
C語言二維陣列的排序問題,c語言二維陣列
不是。這麼說吧,陣列名本身就是指標,指向陣列的第一個元素。至於你所說的呼叫呼叫二級 二維吧 陣列,難道不是如普通變數般直接呼叫嗎?根據問題補充說,這是不允許的,main 函式的形參是固定的不能傳遞指標。而一般的自定義函式只能用傳遞首地址的形式來傳遞二維陣列,例子如下 定義 int a x y int...
C語言陣列問題
二維陣列儲存的形式你應該知道吧,上面那個儲存成a 0 2 4 a 1 6 7 a 2 1 3 a 3 5 9 a本身是陣列的首地址,a 1中1是偏移量。在這個二維陣列裡,每行有兩個數,偏移量就自動成了8 每個int佔4個位元組,兩個就是8個 這是c語言的一種處理。a表示取a的地址裡的值,這個值還是地...