打印二维阵列

时间:2017-12-04 11:12:30

标签: c arrays

我想使用函数

打印行主要部分

代码如下:

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

1 个答案:

答案 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),那么在第一种情况下它不会产生任何警告,但在第二种情况下会产生警告。功能