我想使用函数
打印行主要部分代码如下:
void rowmajor(int array,int row, int column)
{
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < column; ++j)
{
printf("A(%d,%d) =\n", i+1,j+1);
printf("%d\n", array[i][j]);
}
}
}
在main函数中,打印2-d数组的代码正常工作,但它不能使用此代码。
生成的错误是给定的
clang -ggdb3 -O0 -std=c11 -Wall -Werror matrix.c -lcs50 -lm -o matrix
matrix.c:16:25: error: subscripted value is not an array, pointer, or vector
答案 0 :(得分:2)
您以错误的方式传递了参数。
void rowmajor(int row, int column, int array[][column])
{
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < column; ++j)
{
printf("A(%d,%d) =\n", i+1,j+1);
printf("%d\n", &array[i][j]);
}
}
}
当你传递一个数组时,它会衰减到int (*)[column]
,但你认为它是int
类型,这不是编译器抱怨的原因。
请记住,当您传递数组时,您需要指定column
部分,否则您将遇到错误。
此外,您将错误的参数传递给printf
。在打印的情况下,它将是
printf("%d",array[i][j]);
&array[i][j]
表示元素arr[i][j]
的地址。
还有一个初学者的面孔 - 记住一个数组(int[row][column]
)传递给函数时不是int**
有趣的说明:
您可以将数组作为void rowmajor(int row, int column, int array[][column])
传递给函数,void rowmajor(int row, int column, int array[row][column])
在类型安全的情况下更好。
正如Lundin所提到的,假设您声明了一个二维数组int array[2][3]
,那么如果您将其称为rowmajor(3,3,array)
,那么在第一种情况下它不会产生任何警告,但在第二种情况下会产生警告。功能