二维数组传参这么写可以吗?


void test(int (*p)[5])
{}
int main()
{
    int arr[3][5];
    test(arr);
    return 0;
}

int (*p)[5]能写成int (*p[3])[5]吗?

arr是二维数组的数组名,如果将数组看成一个二维的矩形,那arr就是第一行数组的地址,所以在定义时就应该用数组指针 int (*p)[数组中含有元素的个数]。而 int (*p[3])[5]是一个数组指针的数组,他是一个数组不是指针

int (*p)[5]能写成int (*p[3])[5]吗?----不可以啊。先不考虑后面的[5],就一维数组来说,*pp[3]是相同的,*p和*p[3]就是两回事了啊

int (*p[3])[5] 写成 void text( int p[3][5])好了啊

int (p)[5]能写成int (p[3])[5]吗?
不可以
(P)[5]表示的是行指针,指向arr[3][5]的三个“元素”每个“元素”中又含有5个元素。而(p[3])是一个指针数组。因为[]运算符的优先级高于
号运算符,所以p先和[3]组合构成数组,在和
组合构成指针数组,这个数组里面的每个元素都是指针。而 (*p[3])[5]即是取指针数组中下标为5的元素


#include <stdio.h>
void test(int (*p)[5],int len)
{
    int i,j;
    for(i=0;i<len;i++)
    {
        for(j=0;j<5;j++)
        {
            printf("%d ",p[i][j]);
        }
        printf("\n");
    }
}
int main()
{
    int arr[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};
    test(arr,3);
    return 0;
}

img

你可以参考下这篇文章:二维数组实现冒泡排序