例程将简单示意如何在C语言中,将二元数组传入子函数
工具/原料
C语言编译器
一、正确的传入方式
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 firstvoid change_element(int a[][], int d1, int d2)意思就是说对于多维数组a,它的每个维度必须有边界限制,即需要传入维度大小。