我正在编写一个程序,它将一个2D char数组传递到一个用于打印的函数中。但是,当我试图访问2D数组中的元素以进行打印时,我不能这样做,只有当数组被传递时,我才会在main()函数中放置打印循环和语句时,就不会出现这个问题。
有人能帮忙解释一下吗?
void disp_array(char* array)
{
for (int i = 0; i < SIZE; i++)
{
for (int j = 0; j < SIZE; j++)
{
printf("%c", array[i][j]);
}
printf("\n");
}
}附加的是我的代码:j语句中的printf突出显示了一个错误:
E0142:“表达式必须具有指针到对象类型,但它具有int类型”
。
发布于 2022-04-03 17:24:24
函数声明是错误的。
由于参数具有char *类型,所以表达式array[i]生成一个char类型的标量对象,该对象由于整数提升而被提升为int类型,因此在尝试执行array[i][j]时可能不会应用下标运算符。所以编译器发出错误消息。
E0142:“表达式必须具有指针到对象的类型,但它具有int类型。”
函数应该声明如下
void disp_array(char array[][SIZE], int n )
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < SIZE; j++)
{
printf("%c", array[i][j]);
}
printf("\n");
}
}或者像这样
void disp_array(char (*array)[SIZE], int n )
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < SIZE; j++)
{
printf("%c", array[i][j]);
}
printf("\n");
}
}具有数组类型char[SIZE][SIZE]的参数由编译器隐式地调整为char ( * )[SIZE]类型。也就是说,函数不知道存在多少char ( * )[SIZE]类型的元素。因此,您需要显式地指定元素的数量。总是尝试定义一个更通用的函数。
除了数组之外,还需要传递数组中的行数。例如
disp_array( array, SIZE );如果数组包含字符串,则函数定义将类似于
void disp_array(char (*array)[SIZE], int n )
{
for (int i = 0; i < n; i++)
{
puts( array[i] );
}
}https://stackoverflow.com/questions/71728263
复制相似问题