C語言中數(shù)組長(zhǎng)度不能用變量定義嗎?
C語言里,所有變量空間都是在程序運(yùn)行之初向系統(tǒng)申請(qǐng)的,包括指針,除了一些動(dòng)態(tài)申請(qǐng)方式如malloc函數(shù)。沒有申請(qǐng)的空間系統(tǒng)是不允許讀寫的。那么如果一個(gè)數(shù)組大小是變量定義,則在程序運(yùn)行前不能確定數(shù)組大小,也就無法申請(qǐng),故不允許。所以,解決的辦法便是通過malloc函數(shù),即
int a[n];
可改為
int* const a = (int*)malloc(sizeof(int)*n);
這樣a變量就完全可以當(dāng)作一個(gè)數(shù)組直接使用了,包括a[1]之類的。因?yàn)椤癧]”中括號(hào)運(yùn)算符做的只是偏移其內(nèi)的地址數(shù)并取值。如:
a[1]
等價(jià)于
*(a + 1)
而const修飾符在星號(hào)之后,則表示指針在被聲明后不能改變,即只能指向這個(gè)獲取的空間,完全符合數(shù)組的性質(zhì)
綜上所述,如果需要變量控制長(zhǎng)度的一個(gè)數(shù)組,類似“int a[n];”的,可改成“int* const a = (int*)malloc(sizeof(int)*n);”并直接作為數(shù)組以[]方式使用。const可以去掉,但要保證使用時(shí)不改變a的指向