2次元配列を関数に渡すときに問題が発生したが、後でAとBのような解決法が見つかった。2次元配列が連続したメモリ1dとして。だから、私の意見では、実際に2次元の点はありません、コンパイラは、この連続数を分割し、 '2次元'の概念を作った。関数のポインタの2D配列を渡す方法が異なる
私の質問は、明示的にコンパイラにパラメータを 'int **'と伝えた後、なぜ2次元の点を渡さなかったのですか?
誰かが "コンパイラにグループ長を教えていない"と指摘するかもしれませんが、私はこの情報を知っていると思います。なぜなら、12要素のプレーンメモリをarr [2] [6] "void printArr(int _arr [] [6]、int _columns、int _rows)"のようにエラーになります。
助けてください少し混乱...
int arr[][3]={{1,2,3},{5,6,7},{9,10,11},{13,14,15}};
void printArr(int _arr[][3], int _columns, int _rows){ //----->A
void printArr(int (* _arr)[3], int _columns, int _rows){//---->B
void printArr(int** _arr, int _columns, int _rows){//--------->C
for(int r=0; r< _rows; r++){
for (int c=0; c<_columns; c++)
//printf("%4d,", _arr[r][c]);
printf("%4d,", *(*(_arr+r)+c));
}
}
int main(){
printArr(arr, columns, rows);
}
http://c-faq.com/aryptr/index.htmlが質問に答えているかどうかを確認してください。読むべきことはたくさんありますが、実際には適切なCコードを書くための配列とポインタの理解が必要です。誰も簡単なことは誰も言わなかった。 –