二维数组的函数传参分析
二维数组的函数传参分析
文章目录
- 一、形参为二维数组
- 二、形参为数组指针
- 三、形参为二级指针
使用二维数组的函数传参分析进行传递参数时,往往比一维数组做为参数要难以理解,下面来分析常用了三种二维数组的函数传参。
一、形参为二维数组
直接使用二维数组定义的方法,做为函数形参,这个也是最常见的(推荐初学者使用这种方法),也是最好理解的方法了。
函数声明
//函数声明 arr[row][col]中的row, col必须是常量,且只能是数组行与列,不能随便给数字
void arr_fun(int arr[row][col], int row, int col);
void arr_fun(int arr[][col], int row, int col);//int arr[][col]中的rol必须是常量,只能是数组的列数字。不论多少维数组,第一维都可省略。 但是不是两个都省略,如int arr[][]
调用
arr_fun(arr, row, col);//函数调用 实参直接写数组名!数组名!(重点)。//(注意)arr_fun(arr[row][col], row, col)或arr_fun(arr[][col], row, col)都不可以!
例程
#include //函数声明 arr[row][col]中的row, col必须是常量,且只能是数组行与列,不能随便给数字
void arr_fun(int arr[3][5], int row, int col);//函数声明int main(void)
{//数组定义 int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//函数调用arr_fun(arr, 3, 5);return 0;
}
//两个for循环的的3与5是需要
void arr_fun(int arr[3][5], int row, int col)
{int i, j;for(i=0; i<row; i++){for(j=0; j<col; j++){//两个打印方法都可以//printf("%d\t", *(arr[i] + j)); //代表第 i 行 第 j 列printf("%d\t", *(*(arr+i) + j)); //}printf("\n");}}
输出结果
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
二、形参为数组指针
声明
//int (*arr)[col]中的col必须是常量,且只能是数组的列
void arr_fun(int (*arr)[col], int row, int col);
//注意,形参不是(int *arr[n]) ,而是(int (*arr)[n]); int *arr[n]是指针数组 int (*arr)[n]数组指针
// 缘由是 [] 的 优先级比 *的大
调用
arr_fun(arr, row, col);//函数调用 实参同样直接写数组名!//(注意)arr_fun(arr[row][col], row, col)或arr_fun(arr[][col], row, col)同样都不可以!
例程
#include //n的值必须是二维数组的第二维数组元素个数
void arr_fun(int (*arr)[5], int row, int col);//函数声明int main(void)
{//数组定义 int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//函数调用arr_fun(arr, 3, 5);return 0;
}
//两个for循环的的3与5是需要
void arr_fun(int (*arr)[5], int row, int col)
{int i, j;for(i=0; i<row; i++){for(j=0; j<col; j++){//两个打印方法都可以//printf("%d\t", *(arr[i] + j)); //代表第 i 行 第 j 列printf("%d\t", *(*(arr+i) + j)); //}printf("\n");}}
输出
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
三、形参为二级指针
声明
//int **arr为二级指针
void arr_fun(int **arr,int row, int col);
调用
arr_fun( (int **)arr,row, col);//实参不能为数组名!*与上面相反*!有两个 * !//(注意)arr_fun(arr)或arr_fun((int *)arr)不可以!
例程
#include void arr_fun(int **arr,int row, int col);//函数声明int main(void)
{//数组定义 int arr[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//函数调用arr_fun( (int **)arr, 3, 5);return 0;
}
//两个for循环的的3与5是需要
void arr_fun(int **arr, int row, int col)
{int i, j;for(i=0; i<row; i++){for(j=0; j<col; j++){//二级指针的二维数组输出方法printf("%d\t", *((int *)arr +i*row +j ));}printf("\n");}}
输出
1 2 3 4 5
4 5 6 7 8
7 8 9 10 11
学会了,还是学废了~~~~~~~~~~~~

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
