我有一個二維陣列,需要動態分配,所以我寫了這個:
int * array;
array = malloc((sizeA * sizeB) * sizeof(int));
它基本上是一個一維陣列,它的行為就像是一個二維陣列。我正在訪問它,如下所示:
for(int y = 0; y <= sizeA; y ){
for(int x = 0; x <= sizeB; x ){
array[x * y] = /* some stuff */;
}
}
我認為這樣寫一切都很好,但在某些情況下這是行不通的。
案例1: x * y 多次得到相同的結果
x = 3, y = 2
x * y = 6
x = 2,y = 3
x * y = 6,同樣
這意味著某些值會被覆寫并丟失。但是還有另一種情況,這會導致問題。
情況 2:主號碼超出 sizeA 或 sizeB 的范圍
有些值不能使用,因為主要數字只能是數字本身和 1 相乘的結果。所以,雖然我的陣列中的一些值被覆寫,但其他一些甚至沒有被使用。
我能做些什么來防止這種情況發生?
uj5u.com熱心網友回復:
您需要先將列大小乘以行數,然后添加列號。
for(int y = 0; y < sizeA; y ){
for(int x = 0; x < sizeB; x ){
array[x y * sizeB] = /* some stuff */;
}
}
此外,您想使用<而不是,<=這樣您就不會遇到錯誤。
這是一個圖形視圖,可讓您更好地了解其作業原理:
| 0 | 1 | 2 | 3 |
-----------------------
0 | 0 | 1 | 2 | 3 |
-----------------------
1 | 4 | 5 | 6 | 7 |
-----------------------
2 | 8 | 9 | 10 | 11 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/407558.html
標籤:
下一篇:如何防止矩陣訪問不允許的值
