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],就一维数组来说,*p和p[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;
}