gpt4 book ai didi

c - C 中 3d 连续数组的问题

转载 作者:行者123 更新时间:2023-11-30 15:54:48 25 4
gpt4 key购买 nike

我需要用 C 语言构建两个 3D 连续数组(记为 x0x)。尺寸必须为 x[size_tot_y][size_tot_x][size_tot_z]x0[size_tot_y][size_tot_x][size_tot_z] 。这是我的代码:

  double*** x;
double** x_val2;

double*** x0;
double** x0_val2;

x0 = malloc(size_tot_y*sizeof(double**));
x0_val2 = malloc(size_tot_x*size_tot_y*size_tot_z*sizeof(double*));

x = malloc(size_tot_y*sizeof(double**));
x_val2 = malloc(size_tot_x*size_tot_y*size_tot_z*sizeof(double*));

for(j=0;j<=size_tot_y-1;j++) {
x0[j] = &x0_val2[j*size_tot_x*size_tot_z];
x[j] = &x_val2[j*size_tot_x*size_tot_z];
}

for(i=0;i<=size_tot_y-1;i++) {
for(j=0;j<=size_tot_x-1;j++) {
x0[i][j] = malloc(size_tot_z*sizeof(double));
x[i][j] = malloc(size_tot_z*sizeof(double));
}
}

for(i=0;i<=size_tot_y-1;i++) {
for(j=0;j<=size_tot_x-1;j++) {
x0[i][j] = x0_val2[i*j*size_tot_z];
x[i][j] = x_val2[i*j*size_tot_z];
}
}

你能看出错误在哪里吗?

谢谢

最佳答案

你的代码对我来说似乎太复杂了。只要这样做:

 double ***x;
x = malloc(size_tot_y * sizeof(*x));
for (i = 0; i < size_tot_y; i++) {
x[i] = malloc(size_tot_x * sizeof(**x));
for (j = 0; j < size_tot_x; j++) {
x[i][j] = malloc(size_tot_z * sizeof(***x));
}
}

x0相同。将其包装在例程中,这样您就不需要编写相同的代码两次。

编辑

对于连续数组,执行:

 double *storage = malloc(size_tot_x * size_tot_y * size_tot_z * sizeof(*storage));
double *alloc = storage;
double ***x;
x = malloc(size_tot_y * sizeof(*x));
for (i = 0; i < size_tot_y; i++) {
x[i] = malloc(size_tot_x * sizeof(**x));
for (j = 0; j < size_tot_x; j++) {
x[i][j] = alloc;
alloc += size_tot_z;
}
}

如果你真的想要这些指针的话。如果没有,只需分配所有内存并自己进行索引:

double *storage = malloc(size_tot_x * size_tot_y * size_tot_z * sizeof(*storage));
double get(const double *storage, int x, int y, int z) {
return storage[(y * size_tot_x + x) * size_tot_z + z];
}

关于c - C 中 3d 连续数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com