2012-06-20 8 views
5

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

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


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

答えて

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

何も、両方が同じです。ちょうど我々の説得目的のために。

2

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

関連する問題