【发布时间】:2019-11-24 20:43:41
【问题描述】:
我以这种方式创建了一个 3-d 动态数组:
double *A = (double *)malloc(M * N * N * sizeof(int));
这相当于静态矩阵:
double A[M][N][N];
我想引用实现静态行为的每个索引:
for (j = 0; j < N; j++) {
for(i = 0; i < N; i++) {
for(k = 0; k < M; k++) {
if (i!=j)
A[k][j][i] = (y[j]*gain[k][i])/gain[k][j];
else
A[k][j][i] = 0;
printf("%f ", A[k][j][i]);
}
}
}
所以我尝试了这个:
for (j = 0; j < N; j++) { //matrix A
for(i = 0; i < N; i++) {
for(k = 0; k < M; k++) {
if (i!=j)
*(A + k*N + j + i) = (*(y+j) * *((gain+k*N)+i)) / *((gain+k*N)+j);
else
*(A + k*N + j + i) = 0;
printf("%f ", *(A + k*N + j + i));
}
}
}
这是正确的语法吗?
【问题讨论】:
-
double (*A)[N][N] = malloc(M * sizeof *A);将等同于double A[M][N][N];。然后你可以像A[k][j][i]一样使用它。 -
不。你可以分辨,因为
A[k][1][0]和A[k][0][1]指的是同一个地方。 -
如果你想使用
double *A,正确的索引应该是A[k*N*N + j*N + i]来模拟A[k][j][i]的3d索引。 -
您的内存分配是为整数分配空间,而不是
double。这是个问题。 -
@mch 这是一个很酷的技巧,它会分配每个 [N][N] 个元素吗?不知道你能做到这一点。