二维数组作为参数传递的3种传递方式
void average_fun1(int arr[][4])//传递数组,并标明一维数组元素个数
{
for(int row = 0; row < 3;row++)
{
int sum = 0;
for(int col = 0; col < 4; col++)
{
sum += arr[row][col];
}
printf("第%d行平均数: %.3f\n",row + 1,(double)(sum) / 4);
}
}
void average_fun2(int (*arr)[4])//传递数组指针,并标明数组元素个数
{
for(int row = 0; row < 3; row++)
{
int sum = 0;
for(int col = 0; col < 4; col++)
{
sum += arr[row][col];
}
printf("第%d行平均数: %.3f\n",row + 1,(double)(sum) / 4);
}
}
void average_fun3(int* arr)//指针传递,不管是几维数组都把他看成是指针,
{
for(int row = 0; row < 3; row++)
{
int sum = 0;
for(int col = 0; col < 4; col++)
{
sum += *(arr + row*4 + col);//当一维数组看待内存连续访问读取数据
}
printf("第%d行平均数: %.3f\n",row + 1,(double)(sum) / 4);
}
}
void test029()
{
int arr[3][4] = {
{2,3,5,7},
{5,6,2,8},
{9,3,2,1},
};
average_fun1(arr);//方法1
average_fun2(arr);//方法2
average_fun3((int* )arr);//方法3(强制转换,因为arr本质是个2级指针,强制转换为一级指针传递 / 也可不转换 都指向起始地址)
}