char (*cHighValue)[20];
cHighValue = malloc (X * sizeof(char *));
for (i = 0; i < X; ++i)
{
cHighValue [i] = (char *) malloc (20 * sizeof(char));
}
给我错误:表达式必须是可修改的左值,对于&#34; cHighValue [i] =(char *)malloc(20 * sizeof(char));&#34;为什么呢?
答案 0 :(得分:3)
cHighValue
是指向char
数组的指针。
分配为
cHighValue=malloc(sizeof(char)*20*X);
答案 1 :(得分:1)
您将cHighValue声明为指向20个字符数组的指针。但是在您的代码中,您将其用作指向指针数组的指针。您可能想要的是将cHighValue声明为指针数组,并且因为您在堆上分配它,您必须将其声明为指针指针。即:
char **cHighValue;
答案 2 :(得分:0)
cHighValue
是一个指向20-char数组的指针,因此cHighValue[i]
是第i个20字节长的字符数组。
并且chars数组不是可修改的左值,可以赋予malloc()返回的指针值。
要实现您(可能)想要的内容,请从cHighValue
声明中删除括号。
答案 3 :(得分:0)
分配二维数组的正确方法是:
char (*cHighValue)[Y];
cHighValue = malloc( sizeof(char[X][Y]) );
特别要注意:
答案 4 :(得分:-1)
这是数组的类型,
char* cHighValue[20];
cHighValue[0] = malloc (X * sizeof(char *));
for (i = 0; i < X; ++i)
{
cHighValue[i] = (char *) malloc (20 * sizeof(char));
}