C语言二维数组传参不是不可以用一级指针接收,哪位大佬看看我下面的代码为啥可以?

新手上路,请多包涵

C语言二维数组传参不是不可以用一级指针接收,哪位大佬看看我下面的代码为啥可以?


#include<stdio.h>
void print(int* p, int x, int y)
{
    int i = 0;
    for (i = 0; i < x*y; i++)
    {
        if (i % 5 == 0 && i != 0)
        {
            printf("\n");
        }
        printf("%d ", *(p + i));
    }
}
int main()
{
    int arr[3][5] = { {1,2,3,4,5},{2,3,4,5,6},{3,4,5,6,7} };
    print(arr,3,5);
    return 0;
}

阅读 1.4k
1 个回答

谁跟你说的二维数组传参不能用一维数组接收?C语言里面的高维数组其实都是1维数组的语法糖。

int main()
{
    // 设定初值
    int d1[12];
    for (int i = 0; i < 12; i++)
        d1[i] = i + 1;

    // 一维数组
    for (int i = 0; i < 12; i++)
        printf("%d, ", d1[i]);
    printf("\n\n");

    // 二维数组
    int(*d2)[4] = (int(*)[4])d1;
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 4; j++)
            printf("%d, ", d2[i][j]);
        printf("\n");
    }
    printf("\n");

    // 三维数组
    int(*d3)[2][3] = (int(*)[2][3])d1;
    for (int i = 0; i < 2; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            for (int k = 0; k < 3; k++)
                printf("%d, ", d3[i][j][k]);
            printf("\n");
        }
        printf("\n");
    }
}

这是个 C++ 的例子,但把定义放到前面就是 C,你能看到1维数组跟多维数组之间是可以随意转换的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进