第六章 「另類」陣列

2021-04-01 18:56:41 字數 748 閱讀 4969

動態陣列與字串常量可算是兩種「另類」陣列。

vla可變長陣列並不為c89所支援,c99才開始支援vla。但如果想在只支援c89的編譯環境中使用vla的話,怎麼辦呢?我們可以用動態陣列來「模擬」,動態陣列在矩陣的運算中很常見,常用來向函式傳遞乙個大小可變的矩陣。動態陣列的原理,是利用一塊或多塊動態分配的記憶體儲存各維的首位址,這樣就可以p[i][j]的形式訪問陣列的資料了。但是,動態陣列並非真正的陣列,它只是對陣列的一種模擬。由於具有陣列型別的陣列名是系統行為,在使用者這一級沒法做到,因此只能以指標的形式存放首位址,sizeof(p)和sizeof(p[i])結果都是4位元組。雖然動態陣列是依靠動態分配記憶體來建立的,但動態的意義並非來自這裡,而是指大小可變。筆者覺得用「動態陣列」這個名稱來命名非常適合,既不失大小可變的特徵,又可以跟vla可變長陣列區分開來。

下面是建立動態陣列的示例:

#include

#include

void computedata(int *, int, int);

int main(void)

while(x*y > 100);

computedata(idata, x, y);

return 0;

}void computedata(int *ipsource, int irow, int icolumn)

這個程式不使用任何陣列形式的引用,不使用迴圈,就可以列印出用*號組合出來的菱形。當然,筆者並非鼓勵大家編寫這樣的**,但通過這樣的例子加深對字串常量的認識,仍然是非常重要的。

第六章 「另類」陣列

動態陣列與字串常量可算是兩種 另類 陣列。vla可變長陣列並不為c89所支援,c99才開始支援vla。但如果想在只支援c89的編譯環境中使用vla的話,怎麼辦呢?我們可以用動態陣列來 模擬 動態陣列在矩陣的運算中很常見,常用來向函式傳遞乙個大小可變的矩陣。動態陣列的原理,是利用一塊或多塊動態分配的記...

第六章 「另類」陣列

動態陣列與字串常量可算是兩種 另類 陣列。vla可變長陣列並不為c89所支援,c99才開始支援vla。但如果想在只支援c89的編譯環境中使用vla的話,怎麼辦呢?我們可以用動態陣列來 模擬 動態陣列在矩陣的運算中很常見,常用來向函式傳遞乙個大小可變的矩陣。動態陣列的原理,是利用一塊或多塊動態分配的記...

第六章 「另類」陣列

動態陣列與字串常量可算是兩種 另類 陣列。vla可變長陣列並不為c89所支援,c99才開始支援vla。但如果想在只支援c89的編譯環境中使用vla的話,怎麼辦呢?我們可以用動態陣列來 模擬 動態陣列在矩陣的運算中很常見,常用來向函式傳遞乙個大小可變的矩陣。動態陣列的原理,是利用一塊或多塊動態分配的記...