gpt4 book ai didi

C - 将一维数组映射为两个 - 为什么这不起作用?

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

首先是错误:

 error: a value of type "float *" cannot be used to initialize an entity of type "float (*)[2000]"

相关代码如下:

#define opType float
const int N = 2000;
opType *a_h,*b_h,*d_h, *a_d,*b_d, *d_d;
opType (*normalized_a)[N] = a_h;
opType (*normalized_b)[N] = b_h;
opType (*normalized_d)[N] = d_h;

opType (*normalized_a_d)[N] = a_d;
opType (*normalized_b_d)[N] = b_d;
opType (*normalized_d_d)[N] = d_d;

我正在尝试将其规范化为二维,以便稍后可以将双指针传递给函数并使用简写括号语法引用二维。我正在使用 CUDA,所以我必须有用于内存复制的一维声明。有什么办法可以使上述工作?

这个构造是从http://forums.nvidia.com/index.php?showtopic=83941&view=findpost&p=475901借来的

int linear[10*32]; // linear array
int (*twodim)[32] = linear; // interpreted as a two-dimensional [10][32] array.
assert(&twodim[2][4] == &linear[2*32 + 4]); // these are the same

最佳答案

我不知道你的数组初始化数据来自哪里,但错误信息很清楚:您声明了 6 个数组,每个数组包含 2000 个浮点指针。当然,您不能使用单个浮点指针来初始化这些数组之一。

那么您的基础数据是以什么形式存在的,您希望如何使用它?

编辑:好的,根据你的评论,你得到了类似的东西

float myData[N][N];

充满值(value)。在这种形式下,您已经可以通过 myData[i][j] 访问它。现在,如果你只是把它转换成一个浮点指针,比如

float *myDataFlat = (float*)myData;

您也可以通过 myDataFlat[i*N+j] 访问它。

关于C - 将一维数组映射为两个 - 为什么这不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4382240/

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