C語言里,所有變量空間都是在程序運行之初向系統申請的,包括指針,除了一些動態申請方式如malloc函數。沒有申請的空間系統是不允許讀寫的。那么如果一個數組大小是變量定義,則在程序運行前不能確定數組大小,也就無法申請,故不允許。所以,解決的辦法便是通過malloc函數,即
int a[n];
可改為
int* const a = (int*)malloc(sizeof(int)n);
這樣a變量就完全可以當作一個數組直接使用了,包括a[1]之類的。因為“[]”中括號運算符做的只是偏移其內的地址數並取值。如:
a[1]
等價於
(a + 1)
而const修飾符在星號之后,則表示指針在被聲明后不能改變,即只能指向這個獲取的空間,完全符合數組的性質
綜上所述,如果需要變量控制長度的一個數組,類似“int a[n];”的,可改成“int const a = (int)malloc(sizeof(int)*n);”並直接作為數組以[]方式使用。const可以去掉,但要保證使用時不改變a的指向
const是一個C語言(ANSI C)的關鍵字,具有着舉足輕重的地位。它限定一個變量不允許被改變,產生靜態作用。使用const在一定程度上可以提高程序的安全性和可靠性。
原文:https://zhidao.baidu.com/question/397944225.html
————————————————————————————————
java中數組的長度可以用普通變量而不必須是常量是么?