以下兩個函數定義有什麼區別?
2D數組正在作爲參數傳遞。參數類型之間的區別
void fun(int a[][3])
{
//do some task
}
void fun(int (*a)[3])
{
//do some task
}
以下兩個函數定義有什麼區別?
2D數組正在作爲參數傳遞。參數類型之間的區別
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中,當數組符號用於函數參數時,它會自動轉換爲指針聲明。