此功能的此版本很好:
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];
,但我不明白为什么。它应该是同一件事。
与二维数组不同,不能保证行在连续内存中。
如果您为整个n * n
数组进行单个内存分配,则可以将其索引为将其用于1-D数组的数组时失败的方式。