我试图理解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
不知何故,创建的数组是float [2]的信息丢失了,当我尝试将它转换为float [2]时,我得到:
ISO C++ forbids casting to an array type 'float [2]'
答案 0 :(得分:0)
您必须使用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;
}
这应解决有关未定义行为的所有问题,如formerly marked duplicate中对此问题所述。