我感興趣的是不同的方式來分配內存在堆中的二維數組。內存分配指針指向數組和指針指針
當訪問指向指向一個或多個維度數組的指針和指針的指針時,似乎使用相同的符號。我希望能有人澄清每個人的差異和用處。他們都對嗎?
這個第一方式將陣列作爲指針存儲到指針:
char **createTable(int r, int c) {
char **table;
int i;
char *offset;
table = malloc(r * sizeof (char *) + r * c * sizeof (char));
if (!table) return NULL;
offset = (char *) table + sizeof (char *) * r;
for (i = 0; i < r; i++) {
table[i] = offset + c * i;
}
return table;
}
該其他方式似乎更快。我想不出一種很好的方式來包裝它像另一個功能。
char (*table)[c];
table = (char (*)[c]) calloc(r * c, sizeof (char));
我的理解是,即使數組就像靜態指針,數組有能力有自己的幾個維度?
這是真的,我描述的第一種方式是正統的方式?
兩者似乎都做同樣的事情。第二個絕對更優雅。 –
爲什麼不只是'char table [r] [c]'?我猜你的意圖是,將有可能從分配它的函數返回指針?在問題中明確說明這一點可能很有用,所以我們知道你爲什麼不只是在執行'char table [r] [c];' –
更具體地說:你不能返回'table',其中'table '是'char(* table)[c];'來自返回'char **'的函數。鏗鏘:'不兼容的指針類型返回'char(*)[c]'從結果類型'char **'的函數' –