将“复制浮点数组”设置为“多维数组”

set copy array of float to multidimensional array

本文关键字:数组 多维数组 设置 复制      更新时间:2023-10-16

我试图理解 c/arduino 中的指针,它给我带来了问题:)

我有一个函数来创建并返回指向浮点数组的指针:

float* CreateArray(int i) {
    float test[2];
    test[0] = float(i+1); 
    test[1] = float(i+2);
    return test;
}

我还定义了一个多维数组:

float data[2][2];

在我做任何事情之前,我希望数据看起来像这样:(确实如此)

0 0
0 0

当我运行以下代码时:

float* array = CreateArray(22);
*data[1] = *array;

我希望数据看起来像这样:

0  0
23 24

但它看起来像这样:

0  0
23 0

不知何故,创建的数组是浮点数[2]的信息丢失了,当我尝试将其转换为浮点数[2]时,我得到:

ISO C++ forbids casting to an array type 'float [2]'
您必须使用

std::array 使返回的值可访问,而不是使用从堆栈上本地定义的原始数组返回的指针:

std::array<float,2> CreateArray(int i) {
    std::array<float,2> test;
    test[0] = float(i+1); 
    test[1] = float(i+2);
    return test;
}

这应该可以解决有关未定义行为的所有问题,如此问题之前标记的副本中所述。