gpt4 book ai didi

C传递3D数组的2D子集

转载 作者:太空宇宙 更新时间:2023-11-04 08:32:59 25 4
gpt4 key购买 nike

我有一个 3D 数组定义为

double ***array

这是动态分配的内存。我确定分配是正确的。数组看起来像这样

array[TDIM][YDIM][XDIM]

我的问题是关于传递/使用数组。函数声明为

void fun(double ***array);

通常,我会进行函数调用并将数组作为

fun(array)

我可以在函数内部更改值。例如

array[0][10][10] = 2.29;

按预期工作。如果我有一个函数,我只想在数组的一个“层”上工作而不是传递整个数组...比如 TDIM == 4...我该如何传递该参数?函数声明是什么样的?如何更改被调用函数中的值?

我已经尝试过类似的东西并且它可以编译但是有些东西看起来很可疑

void fun(double **array)    // function declaration
fun(array[4]) // function call
array[10][10] = 2.29; // Inside the function, change array[4][10][10] to 2.29

我只想在函数内部处理 3D 数组的一个 2D 层,而不必传递整个 3D 数组,如果这有意义的话。我可以直接这样做,还是必须创建一个临时数组来存储二维层并使用它?可以使用一些输入。

编辑:添加示例代码以进一步说明。两种方法是否相同?我认为我在使用“fun2”方法时遇到了困难:

void fun(double ***array);  // Declaration
void fun2(double **array); // Declaration

int main()
{
double ***array
int XDIM=10,YDIM=10,TDIM=2;

allocate3d(&array,XDIM,YDIM,TDIM); // This works fine
fun(array);
fun2(array[0]);
}

void fun(double ***array)
{
for(int j = 0; j < YDIM; j++)
{
for(int i = 0; i < XDIM; i++)
{
array[0][j][i] = 2.29;
}
}
}

void fun2(double **array)
{
for(int j = 0; j < YDIM; j++)
{
for(int i = 0; i < XDIM; i++)
{
array[j][i] = 2.29;
}
}
}

最佳答案

你最好提供一个工作示例.. 有许多缺失的部分可能在某些方面是错误的(例如变量 XDIM, YDIM ,..)。很难理解您要做什么。

假设 funfun2 的任务是在用户传递的单元格中写入值 2.29,那么您的 fun 方法没有多大意义。你如何传递索引?您在方法中使用了 0。这个更改怎么样:

void fun(double ***array, int idx)
{
for(int j = 0; j < YDIM; j++)
{
for(int i = 0; i < XDIM; i++)
{
array[idx][j][i] = 2.29;
}
}
}

评论后编辑:三维数组看起来像二维数组的数组,并且它在内存中是连续的:

int array3d[2][2][2] = {{{0, 1}, {2, 3}},{{4, 5}, {6, 8}}};

在内存中是这样的:

0 1 2 3 4 5 6 7

它和声明完全一样:

int array1d[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };

因此,您的方法是正确的,因为您正在更改相同的内存位置。

关于C传递3D数组的2D子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27434650/

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