5

次の 2 つの関数定義の違いは何ですか?
2D 配列がパラメーターとして渡されています。

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


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

3 に答える 3

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
}
于 2012-06-20T08:01:33.650 に答える
3

何も、両方とも同じです。私たちの説得力のある目的のためだけに。

于 2012-06-20T08:03:49.920 に答える
2

上記の2つに違いはありません。C では、関数のパラメーターに配列表記を使用すると、自動的にポインター宣言に変換されます

于 2012-06-20T08:07:49.573 に答える