看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《lO (今天早上)》之銘言: : 我在網路上找的資料幾乎都是一維例子 : 想問一下假如今天是二維的陣列呢 : 像以下這個例子 : int **Data,ColumnNumber=0; : if (Need To Realloc a NewColumn) : ColumeNumber++; : Data=(int**)realloc(Data,ColumnNumber*sizeof(int*)); : 這樣的情況之下 : for(i) : Data[0][i]到Data[Column-2][i]的Data有需要去複製嗎? 在這個情況下你只有配置了一堆指標, 還沒配置能夠儲存值的整數「空間」 就像下面這樣 : ┌───┐ Data ─→ │ ┼──→ ? ├───┤ │ ┼──→ ? ├───┤ . . . 如果是上面的圖示, 頂多只能用到一層括號 (Data[ 0 ]) 去取某個指標, 而不能用兩層括號 (Data[ 0 ][ 0 ]) : 還是說當上面那個realloc已經做好這一切了? : 假如要的話 : 那該怎麼寫呢 : for(i;;) : Data[i]=(int*)realloc(Data[i],一樣的size); : 嗎? : 表達能力不是很好~"~ : 謝謝各位 realloc 不會改到本來的指標的值, 所以要增加「列」的時候可以放心使 用, 不過你多配置的始終還是只有「一個整數指標」的空間, 還需要其他 配置的動作, 像是 : int **Data = malloc( 1 * sizeof(int*) ); // 新增第一列的儲存空間, 10 個元素 Data[ 0 ] = malloc( 10 * sizeof(int) ); // 新增第二列, 5 個元素 Data = realloc( Data, 2 * sizeof(int*) ); Data[ 1 ] = malloc( 5 * sizeof(int) ); ---------------------------------------------------------------- 不過這樣會非常麻煩, 可以讓 STL 容器來幫你處理記憶體配置的問題, 如果只能用C, 我會建議你定義以下的結構 : typedef struct { int content[100]; }OneDimensionArray; 然後用一個指標 OneDimensionArray *twoDimensionArray = malloc( sizeof(OneDimensionArray) ); 把它當內建型態來用就好, 不過這樣存取就會相對比較麻煩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.121.197.115
lO:其實我沒打出來(int*)malloc(sizeof(int)); 06/28 22:29
lO:不過還是謝謝你啦 06/28 22:29