A [N * i + j]を使用して1次元配列として実装されたNxN 2D配列を持っています。私は、配列の列への参照を作成し、それらを通常の列ベクトルとして関数に渡すことができるようにします。以下のN = 3の例を見ることができます。この関数は、渡されたベクトルのちょうど乗を返します。2D配列のカラムへのポインタ
#include <stdio.h>
int func(int* vec[3]){
int result=0;
for(int i=0;i<3;i++){
result+=(*vec[i])*(*vec[i]);
printf("vec[%d]=%d\n",i,*vec[i]);
}
return result;
}
void main(){
int A[]={0,1,2,3,4,5,6,7,8};
int *a[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
a[j][i]=&A[3*i+j];
}
}
for(int i=0;i<3;i++){
printf("vector %d\n",i);
for(int j=0;j<3;j++){
printf("%d\n",*a[i][j]);
}
}
printf("%d\n",func(a[0]));
}
これは動作しますが、問題は機能のみのタイプint* vec[3]
の引数のために働くです。私が本当に好きなのは、関数が型int vec[3]
の引数を取るようにすることですが、ポインタのベクトルをベクトル要素が指す値のベクトルとしてどのように渡すべきか混乱します。