我感兴趣的是不同的方式来分配内存在堆中的二维数组。内存分配指针指向数组和指针指针
当访问指向指向一个或多个维度数组的指针和指针的指针时,似乎使用相同的符号。我希望能有人澄清每个人的差异和用处。他们都对吗?
这个第一方式将阵列作为指针存储到指针:
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 **'的函数' –