c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:
方法一,形参给出第二维的长度。
例如:
#include
void func(int n, int a[][size])
{
/* access array */
a[i][j];
}
void main()
{
int a[10][10];
func(10, a);
}
方法二,形参声明为指向数组的指针。
例如:
#include
void func(int n, int (*a)[size])
{
a[i][j]; /* right */
}
方法三,形参声明为指针的指针。
例如:
#include
void func(int n, int **a)
{
a[i][j]; /* wrong, 编译器不知道第二维长度无法定位元素 */
/* access by address */
*(a + row_size * i + j);
}
上面的都是针对声明的静态数组的情形,一般对于动态数组可以用void func(int **a)或int func(int *a[])这种形式。特别要注意int *a[]与int (*a)[]的区别,前者声明指向数组的指针,后者声明指向特定长度的数组的指针。
PS:“我是一名从事了10年的老程序员,最近我花了一个月整理了一份最适合2020年学习的c/c++项目实战以及基础教程干货,送给每一位编程小伙伴,这里是小白聚集地,欢迎初学和进阶

本文介绍了C语言中在函数中传递二维数组的三种常见方法:1) 形参给出第二维长度;2) 形参声明为指向数组的指针;3) 形参声明为指针的指针。特别强调了动态数组情况下使用void func(int **a)或int func(int *a[])的处理方式,并提醒了int *a[]与int (*a)[]的声明区别。

1017

被折叠的 条评论
为什么被折叠?



