在C99,有這兩個?:代碼以便與可變長度數組
int main() {
int n , m;
scanf("%d %d", &n, &m);
int X[n][m];
X[n-1][m-1] = 5;
printf("%d", X[n-1][m-1]);
}
和之間有很大的不同:
int main(int argc, char *argv[]) {
int n , m;
int X[n][m];
scanf("%d %d", &n, &m);
X[n-1][m-1] = 5;
printf("%d", X[n-1][m-1]);
}
第一個似乎總是工作,而第二個似乎適用於大多數輸入,但爲輸入5 5
和6 6
提供了段錯誤,併爲輸入9 9
返回了不同於5的值。那麼你需要確保在使用可變長度數組聲明它們之前獲取這些值,或者在這裏還有其他事情嗎?
第二個是明顯的錯誤...因爲'n'和'm'沒有初始化。 'int X [n] [m];'在代碼中使用'm'和'n'的值 - 你不能稍後設置它們,也不能通過稍後更改它們來調整它的大小。 – Dmitri
好的,謝謝,想確保它只是一個有序的東西,而不是我沒有想到的其他東西。 – Austin