代码之家  ›  专栏  ›  技术社区  ›  Sparker0i

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

  •  0
  • Sparker0i  · 技术社区  · 6 年前

    以下是我的 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
    

    由于它在输出中可见,主函数中的for循环正确地打印了数组,而 printSolution() 函数无法正确打印为什么会这样?

    1 回复  |  直到 6 年前
        1
  •  4
  •   bipll    6 年前
    *((sol + i) + j)
    

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

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