一、合法写法
- int arr[]2[3];
- int arr[][3];
这是为什么?
因为在第二维大小相同的情况下,形参数组的第一维可以与实参数组不同。这时形参数组和实参数组都是由相同类型和大小的一维数组组成的。
二、不合法写法
- int arr[2][];
- int arr[][];
这是为什么?
因为二维数组是由若干个一维数组组成的,在内存中,数组是按行存放的,因此,在定义二维数组时,必须指定列数(即一行中包含几个元素),由于行参数组与实参数组类型相同,所以它们是由具有相同长度的一维数组所组成的。不能只指定第一维(行数)而省略第二维(列数)。
三、写一个练习题
要求:有3x4矩阵,初始化它并输出,然后求出最大值和最小值
#include<stdio.h>
int i,j; /*定义全局变量*/
/*初始化数组函数*/
void init_shuzu(int a[][3])
{
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("a[%d][%d]=",i,j);
scanf("%d",&a[i][j]);
}
}
}
/*输出数组函数*/
void Printf_shuzu(int a[][3])
{
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("a[%d][%d]=%d\t",i,j,a[i][j]);
}
putchar('\n');
}
}
/*输出数组最大值函数*/
void Find_Max_data(int a[][3])
{
int Max = a[0][0];
int l = 0;
int h = 0;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(Max<a[i][j])
{
Max = a[i][j];
l = i;
h = j;
}
}
}
printf("最大值是a[%d][%d] = %d\n",l,h,Max);
}
/*输出数组最小值函数*/
void Find_Min_data(int a[][3])
{
int Min = a[0][0];
int l = 0;
int h = 0;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(Min>a[i][j])
{
Min = a[i][j];
l = i;
h = j;
}
}
}
printf("最小值是a[%d][%d] = %d\n",l,h,Min);
}
int main()
{
int arr[2][3];
init_shuzu(arr);
printf("打印数组:\n");
Printf_shuzu(arr);
Find_Max_data(arr);
Find_Min_data(arr);
return 0;
}
输出结果: