怎么把二元数组传入子函数
1、在编写接收二元数组作为参数的子函数时,需要在函数形参列表中指定数组的两个维度,比如
void print_element(int a[2][2]);
而不能只传入数组名,将两个维度信息空缺:
void print_element(int a[][]); //This is wrong
2、这里是一个简单的传入二元数组并打印数组元素的例子:
#include <stdio.h>
void print_element(int a[2][2])
{
for(int i = 0; i < 2; i++)
for(int j = 0 ; j < 2; j++)
printf("%d ", a[i][j]);
}
int main(void) {
int a[2][2] = {1,2,3,4};
print_element(a);
return 0;
}

3、传入二元数组名作为子函数的参数后,子函数中对数组元素的操作实际上就是对内存中数组元素进行的操作,而不是子函数调用结束后原二元数组内容不发生改变。比如下面的程序中,在子函数中对数组元素进行更改,而主函数中,数组元素也发生了改变:
#include <stdio.h>
void change_element(int b[2][2])
{
for(int i = 0; i < 2; i++)
for(int j = 0 ; j < 2; j++)
b[i][j]++;
}
int main(void) {
int a[2][2] = {1,2,3,4};
change_element(a);
for(int i = 0; i < 2; i++)
for(int j = 0 ; j < 2; j++)
printf("%d ", a[i][j]);
return 0;
}

1、如果子函数没有在形参列表中指定数组的两个维度,而是期望将两个维度信息按照变量单独传入,如
void print_element(int a[][], int d1, int d2); //This is wrong
那么编译器会报错:
error: declaration of ‘a’ as multidimensional array must have bounds for all dimensions except the first
void change_element(int a[][], int d1, int d2)
意思就是说对于多维数组a,它的每个维度必须有边界限制,即需要传入维度大小。

