24-二维数组和函数

 

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时,输出结果为:

人生之路,不忘初心,勿忘始终!
原文地址:https://www.cnblogs.com/xdl745464047/p/4003851.html