陣列的大小不能用變量表示的,是因為在編譯連線期間記憶體要按照你制定的長度給陣列分配相應的記憶體空間,如果是變數的話就沒有辦法給它分配了,你可以用符號常量來解決,在開頭用:
# define m 100
# define n 100 然後在程式中就可以定義u[m][n]二維陣列了,當不一定非要是100,可以是任何一個正整數。
C語言裡,所有變數空間都是在程式執行之初向系統申請的,包括和指標,它也需要空間,除了一些動態申請方式如malloc函式。沒有申請的空間系統是不允許讀寫的。那麼如果一個數組大小是變數定義,則在程式執行前不能確定陣列大小,也就無法申請,故不允許。解決的辦法如前面所說,如:
int a[n];
可改為
int* const a = (int*)malloc(sizeof(int)*n);
這樣a變數就完全可以當作一個數組直接使用了,包括a[1]之類的。因為“[]”中括號運算子做的只是偏移其內的地址數並取值。如:
a[1]
等價於
*(a + 1)
而const修飾符在星號之後,則表示指標在被聲明後不能改變,即只能指向這個獲取的空間,完全符合陣列的性質。
陣列的大小不能用變量表示的,是因為在編譯連線期間記憶體要按照你制定的長度給陣列分配相應的記憶體空間,如果是變數的話就沒有辦法給它分配了,你可以用符號常量來解決,在開頭用:
# define m 100
# define n 100 然後在程式中就可以定義u[m][n]二維陣列了,當不一定非要是100,可以是任何一個正整數。
C語言裡,所有變數空間都是在程式執行之初向系統申請的,包括和指標,它也需要空間,除了一些動態申請方式如malloc函式。沒有申請的空間系統是不允許讀寫的。那麼如果一個數組大小是變數定義,則在程式執行前不能確定陣列大小,也就無法申請,故不允許。解決的辦法如前面所說,如:
int a[n];
可改為
int* const a = (int*)malloc(sizeof(int)*n);
這樣a變數就完全可以當作一個數組直接使用了,包括a[1]之類的。因為“[]”中括號運算子做的只是偏移其內的地址數並取值。如:
a[1]
等價於
*(a + 1)
而const修飾符在星號之後,則表示指標在被聲明後不能改變,即只能指向這個獲取的空間,完全符合陣列的性質。