1、二维数组元素作为函数参数
二维数组元素作为函数参数,相当于变量的值传递过程。
2、二维数组名作为函数参数
二维数组名作为函数参数,相当于地址传递。
(1)在被调函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维大小的说明
例如:
void test(int array[3][5]);
void test(int array [][5]);
注意:二者都是合法等价的,但是不能把第二维或者更高维的大小省略,如下面的定义是不合法的:
void test(int array[][]);
因为从实参传递来的是数组的起始地址,在内存中按数组排列规则存放(按行存放),而并不区分行和列。
如果在形参中不说明列数,则系统无法确定应为多少行多少列,不能只指定一位而不指定二维,下面写法也是错误的:
void test(int array[3][]);
(2) 实参数组的维数可以大于形参数组的维数,例如实参数组定义为:
void test(int array[3][5]);
而形参数组定义为:
int array[2][5];
这时形参数组只取实参数组的一部分,其余部分不起作用。
思考&实现1:
从键盘上接收两个参数分别存放到m,n中,使用m和n构成数组:
1)定义一个函数使用i*j 初始化 a[i][j];
2)定义一个函数打印二维数组的每一个值
1 /*
2 从键盘上接收两个参数分别存放到m,n中,使用m和n构成数组:
3 1)定义一个函数使用i*j 初始化 a[i][j];
4 2)定义一个函数打印二维数组的每一个值
5 */
6 #include <stdio.h>
7 //定义一个函数,用于打印数组中的元素
8 void printArray(int x, int y, int arr[x][y])
9 {
10 for (int i = 0; i < x; i++)
11 {
12 for (int j = 0; j < y; j++)
13 {
14 //初始化每行元素后换行
15 if(j % y == 0)
16 {
17 printf("
");
18 }
19 //a[%d][%d]=%d后面敲一个tab,方便查看输出后的元素
20 printf("a[%d][%d]=%d ", i, j, arr[i][j]);
21 }
22 }
23 //换行
24 printf("
");
25 }
26 //定义一个函数,使用 i*j 初始化数组
27 void initArray(int x, int y, int arr[x][y])
28 {
29 for (int i = 0; i < x; i++)
30 {
31 for (int j = 0; j < y; j++)
32 {
33 //给arr[i][j]赋值 i*j
34 arr[i][j] = i * j;
35 }
36 }
37
38 }
39
40 int main()
41 {
42 int m, n;
43 //提示用户输入两个数m, n
44 printf("请输入两个数(用逗号隔开):
");
45 //接收用户输入的两个数
46 scanf("%d,%d", &m, &n);
47 //定义一个数组,用于存储数组元素
48 int a[m][n];
49 //调用函数,初始化数组,数组a作为实参
50 initArray(m, n, a);
51 //调用函数,打印数组,数组a作为实参
52 printArray(m, n, a);
53 return 0;
54 }
当输入3,4时,输出结果为: