C语言 | 二维数组作为函数参数

Posted 嵌入式大杂烩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 | 二维数组作为函数参数相关的知识,希望对你有一定的参考价值。

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

偶然间发现C语言二维数组作为函数的参数是个比较容易出错的问题。例如我写了一个这样子的函数:

void func1(int **array, int m, int n)

	int i = 0, j = 0;
	
	for ( i = 0; i < m; i++ )
	
		for ( j = 0; j < n; j++ )
		
			printf("%d ", *(*(array+i)+j) );  //printf("%d ", array[i][j] );
		
	

    我的主函数代码为:

int main(void)

	int a[3][3] =  1, 2, 3, 4, 5, 6, 7, 8, 9 ;

	func1((int**)a, 3, 3); 
	
	return 0;

        发现并不能输出想要的东西,查资料发现二维数组作为函数参数时要给出二维长度。于是我在主函数中定义了一个指针数组作为中间桥梁即可得到正确结果。修正后的主函数代码如下:

int main(void)

	int a[3][3] =  1, 2, 3, 4, 5, 6, 7, 8, 9 ;
	int *p[3];
	
 	p[0] = &a[0][0];	//a[0]
	p[1] = &a[1][0];    //a[1]
	p[2] = &a[2][0];    //a[2]
	func1(p, 3, 3); ; 
	
	return 0;

除此之外,还有一下几种定义方法:

(1)形参声明为一级指针

//方法二:形参声明为一级指针
void func2(int *array, int m, int n)

	int i = 0;
	
	for ( i = 0; i < m*n; i++ )
	
		printf("%d ", array[i]);
	

(2)形参给出二维长度

void func3(int array[][3], int len)   //void func4(int (*array)[3], int len)

	int i = 0, j = 0;
	
	for ( i = 0; i < len; i++ )
	
		for ( j = 0; j < 3; j++ )
		
			printf("%d ", array[i][j]);
		
	

以上就是关于二位数组的一点笔记,如有错误欢迎指出!

 

以上是关于C语言 | 二维数组作为函数参数的主要内容,如果未能解决你的问题,请参考以下文章

C语言函数传递二维数组

C语言中当二维数组和多维数组作为函数参数时[重复]

C语言 | 二维数组作为函数参数

C-二维数组作为函数参数, 字符数组

C语言中如何将二维字符数组作为函数参数引用传递

C语言二维数组作为函数的参数