数组作为指针传递给函数时无法正确显示

时间:2018-07-24 10:32:48

标签: c++ pointers

以下是我的main()函数:

int main()
{
    int N = 4;
    int A[N][N] = {
        {1 , 0 , 0 , 0},
        {1 , 1 , 0 , 1},
        {0 , 1 , 0 , 0},
        {1 , 1 , 1 , 1}
    };
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
            cout << A[i][j] << " ";
        cout << "\n";
    }
    cout << "\n";
    printSolution(N , *A);
    cout << "\n";
    return 0;
}

在这里,我声明了一个带有值的4x4数组。下面给出的是printSolution,我在其中传递了指向其中的数组的指针。

void printSolution(int N , int *sol)
{
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
            cout << *((sol + i) + j) << " ";
        cout << "\n";
    }
}

下面是输出:

1 0 0 0
1 1 0 1
0 1 0 0
1 1 1 1

1 0 0 0
0 0 0 1
0 0 1 1
0 1 1 0

由于在输出中可见,所以main函数内的for循环正确打印了该数组,而printSolution()函数无法正确打印该数组。为什么会这样?

1 个答案:

答案 0 :(得分:4)

*((sol + i) + j)

说,对于i = 2和j = 2,这仅是*(sol + 4),即第1行第0列中的元素(正是所打印的内容。)

您可能想要*((sol + i * N) + j)