亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確地設置、訪問和釋放C中的多維數組?

如何正確地設置、訪問和釋放C中的多維數組?

C
慕姐8265434 2019-06-10 20:25:24
如何正確地設置、訪問和釋放C中的多維數組?我在C中看到了許多關于多維數組的“我的代碼出了什么問題”的問題。出于某種原因,人們似乎無法理解這里發生的事情,所以我決定回答這個問題,作為對其他人的引用:如何正確地設置、訪問和釋放C中的多維數組?如果其他人有用的建議,請隨心所欲地張貼!
查看完整描述

3 回答

?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

在C中,自C99以來,即使是動態多維數組也可以很容易地一次分配malloc被釋放free:

double (*A)[n] = malloc(sizeof(double[n][n]));for (size_t i = 0; i < n; ++i)
  for (size_t j = 0; j < n; ++j)
      A[i][j] = someinvolvedfunction(i, j);free(A);


查看完整回答
反對 回復 2019-06-10
?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

在C89中,至少有四種不同的方法來創建或模擬多維數組。

一個是“分開分配每一行”,邁克在他的回答中描述了這一點。它是多維數組,它只是模仿一個數組(特別是模仿訪問元素的語法)。在每一行都有不同大小的情況下,它可能很有用,因此您不是表示矩陣,而是表示具有“粗糙邊緣”的東西。

一個是“分配多維數組”。看起來是這樣的:

int (*rows)[NUM_ROWS][NUM_COLS] = malloc(sizeof *rows);...free(rows);

那么訪問元素[i,j]的語法是(*rows)[i][j]..在C89中,兩者都是NUM_COLSNUM_ROWS必須在編譯時知道。這是一個真正的二維數組rows是指向它的指針。

一個是“分配一個行數組”。看起來是這樣的:

int (*rows)[NUM_COLS] = malloc(sizeof(*rows) * NUM_ROWS);...free(rows);

那么訪問元素[i,j]的語法是rows[i][j]..在C 89中,NUM_COLS必須在編譯時知道。這是一個真正的二維數組.

一種是,“分配一個一維數組并假裝”??雌饋硎沁@樣的:

int *matrix = malloc(sizeof(int) * NUM_COLS * NUM_ROWS);...free(matrix);

那么訪問元素[i,j]的語法是matrix[NUM_COLS * i + j]..這個(當然)不是一個真正的二維數組.實際上,它的布局與一個相同。


查看完整回答
反對 回復 2019-06-10
  • 3 回答
  • 0 關注
  • 541 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號