【发布时间】:2017-10-04 06:02:59
【问题描述】:
所以,这是我的逻辑:
这是一些文字:
char *text;
那么这是文本数组:
char **arr;
那么这些数组的数组是:
char ***arr2d;
如果我想要一个函数来修改它,它需要接受它:
char ****arr2d;
并在函数内将其用作:
*arr2d = (e.g. allocate);
所以如果我想创建这样的二维数组并使第一行第一列只包含一个字母“a”,那么为什么这不起作用?
#define COLUMNS 7
void loadTable(char ****table)
{
*table = (char ***) malloc(sizeof(char**));
if (!*table) {
printf("Allocation error for table rows.");
return;
}
*table[0] = (char**) malloc(COLUMNS * sizeof(char*));
if (!*table[0]) {
printf("Allocation error for table columns.");
return;
}
*table[0][0] = (char*) malloc(2 * sizeof(char));
*table[0][0][0] = (char)(97);
*table[0][0][1] = '\0';
}
int main()
{
char ***table;
loadTable(&table);
return 0;
}
【问题讨论】:
-
您需要 4 个指针的假设是不正确的。没错,要更改字符串数组的内存参数,您需要传递该内存块的地址,但您不需要 4 个星号。
-
@ryyker 我有点迷路了。所以在主函数中我需要通过地址传递,而接收函数只需要3星?
-
是的,这是真的。请参阅下面的说明。
-
虽然“那么这是文本数组:”似乎适用于
char **arr;",但arr不是数组。它是一个指针。这是一个pointer to a pointer ofchar。对于char *b[10],b是array。我发现保持这种差异清晰有助于解决编码问题,例如张贴在这里。
标签: c arrays multidimensional-array char malloc