以下两个函数定义有什么区别?
二维数组作为参数传递。
void fun(int a[][3])
{
//do some task
}
void fun(int (*a)[3])
{
//do some task
}
以下两个函数定义有什么区别?
二维数组作为参数传递。
void fun(int a[][3])
{
//do some task
}
void fun(int (*a)[3])
{
//do some task
}
没什么,[]
只是指针的语法糖。
这是一个简单的测试用例,表明索引甚至没有区别:
#include <stdio.h>
void fun1(int a[][3]) { printf("%d\n", a[2][2]); }
void fun2(int (*a)[3]){ printf("%d\n", a[2][2]); }
void main() {
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
fun1(a); // prints 9
fun2(a); // prints 9
}
没什么,两者都是一样的。只是为了我们的说服目的。
以上两者没有区别。在 C 中,当数组表示法用于函数参数时,它会自动转换为指针声明。