-2
この関数のこのバージョンは、良い作品:Cマトリックスとポインタエラー
int** outerProduct(int v[], int n){
int i, j;
int **a = malloc(n*sizeof(int*));
for(i=0; i<n; i++){
a[i] = malloc(n*sizeof(int));
}
for(i=0; i<n; i++){
for(j=0; j<n; j++){
*(*(a+i)+j) = v[i]*v[j];
}
}
return a;
}
そして、これは動作しません:
int** outerProduct(int v[], int n){
int i, j;
int **a = malloc(n*sizeof(int*));
for(i=0; i<n; i++){
a[i] = malloc(n*sizeof(int));
}
for(i=0; i<n; i++){
for(j=0; j<n; j++){
*(a+(i*n)+j) = v[i]*v[j];
}
}
return a;
}
エラーが*(a+(i*n)+j) = v[i]*v[j];
ですが、私は理由を理解していません。それは同じことでなければなりません。
2つの参照を比較していますか?それはどうやって「同じもの」になりますか? lhsにはさまざまな種類があります。 –
2次元配列とは異なり、行が連続したメモリになるという保証はありません。 –
@WeatherVane aaaahそうです。私はそれについて考えなかった。ありがとう! – KRower