我可以使用一維數組的指針作爲函數的指針,但是我不知道對於二維數組使用相同的技巧。C:二維數組的指針
這裏是我的示例代碼:
int main(){
int b[10]; //initialize b
Print(b);
int a[10][10]; //initialize a
Print2(a);
}
void Print(int*b){
for(int i=0; i<10; i++)
printf("%d\n",*(b+i));
}
// I want to use same technique here
// but i have met error
void Print2(int*a){
for(int i=0; i<10; i++)
for(int j=0; j<10; j++)
printf("%d\n",*(*(a+i)+j)); // error at this line
}
請幫助我如何使用一維數組的相同的技術二維數組。
謝謝:)
我不清楚最後一個例子是否有效。我認爲它可能是,但詹姆斯Kanze(C + +大師)認爲它可能不是。 IIRC的理由是它違反了嚴格的走樣。它還在指針算術表達式中使用指向data2D [0]的第一個元素的指針,該表達式超出data2D [0]的範圍。 – 2012-07-20 09:02:06
@SteveJessop如果你想要最後一個例子是絕對正確的,使用'&data2D [0] [0]'。這是第一個元素的純粹地址。至於什麼樣的選擇,我同意最好使用第一個例子,這就是爲什麼它是第一個例子。指針運算只能在真正需要時才使用。 – Malcolm 2012-07-20 09:17:13
@SteveJessop你有一個關於詹姆斯的帖子在這個問題上的鏈接。這令我感到驚訝,因爲大多數人會同意你的觀點:「data2D [0]」是正確的(或者大多數已經被教導過,因爲它返回一個整數數組,像任何數組一樣,它衰變成指向其第一個元素的指針, 「int」) – Larry 2012-07-20 12:26:19