参数类型之间的差异

时间:2012-06-20 08:00:18

标签: c

以下两个功能定义有什么区别?
2D数组作为参数传递。

void fun(int a[][3])
{
   //do some task
}


void fun(int (*a)[3])
{
   //do some task
}

3 个答案:

答案 0 :(得分:12)

没什么,[]只是指针的语法糖。

这是一个简单的测试用例,表明在索引方面甚至没有区别:

#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
}

答案 1 :(得分:3)

没什么,两者都是一样的。只是为了我们的目的。

答案 2 :(得分:2)

上述两者之间没有区别。 在C中,当数组表示法用于函数参数时,它会自动转换为指针声明