首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将浮点数组从函数中传递出去

不能将浮点数组从函数中传递出去
EN

Stack Overflow用户
提问于 2019-05-26 03:15:16
回答 3查看 761关注 0票数 1

我是c++新手,我希望使用指针从函数中传递一个浮点数组。但是,返回的数组总是0;我运行在Arduino Uno上。

这是我的密码。我希望readSensor()函数传递一个由3个浮点数组成的浮点数数组。浮点数数组应该传递给指针输出*。但是当我打印读数时,它显示的是0.00,而不是我昏过去的值。

代码语言:javascript
复制
void setup() {
  Serial.begin(9600);
}

void loop() {
  float readings[3];
  readSensor(readings);
  for (int i = 0;i < 3;i++) {
    Serial.println(readings[i]);
  }
  delay(1000);
}

// pass out these 3 floats
float val1 = 3.14159;
float val2 = 2.741;
float val3 = 87;
void readSensor(float* output) {
  float container[3] = {val1, val2, val3};
  output = container;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-26 03:39:51

您不能以所寻求的方式“从函数中传递数组”。C++不提供这样的机制,只使用指针和原始(C-样式)数组。

在你的特殊方法中

container3 = {val1,val2,val3};输出=容器;}

当函数返回时,container不再存在。另外,output是通过值传递的,因此赋值output = container对调用方不可见。

有必要将指向(数组的第一个元素)的指针传递到函数中,并根据需要将函数复制数据。例如,

代码语言:javascript
复制
void readSensor(float* output)
{
     float container[3] = {1, 2, 3};
     for (int i = 0; i < 3; ++i)
        output[i] = container[i];
}

调用方必须提供数组并传递它。

代码语言:javascript
复制
int main()
{
     float result[3];
     readSensor(result);   // data will be copied into result
     // use result here
}

请记住,调用方负责正确调用该函数。例如,如果上面函数的调用者传递一个带有两个元素的数组,则行为是未定义的。

C++中的一种首选方法是使用标准容器,例如std::vector。例如;

代码语言:javascript
复制
#include <vector>

std::vector<float> readSensor()
{
     float container[3] = {1, 2, 3};
     std::vector<float> output;
     for (int i = 0; i < 3; ++i)
        output.push_back(container[i]);
     return output;
}

int main()
{
     std::vector<float> result;
     result = readSensor();
     // use result here
}

如果您不知道如何使用标准容器,那么这里有大量的文档。

票数 5
EN

Stack Overflow用户

发布于 2019-05-26 03:29:58

代码语言:javascript
复制
void readSensor(float* output) 
{
    float container[3] = {val1, val2, val3};
    for (int i=0; i<3; i++)
    {
        output[i] = container[i];
    }   
}
票数 2
EN

Stack Overflow用户

发布于 2019-05-26 03:37:01

代码语言:javascript
复制
void readSensor(float* output) {
  float container[3] = {val1, val2, val3};
  output = container;
}

在这里,您将在堆栈上创建一个数组container并对其进行初始化,并将其第一个元素的地址分配给output。然后,当您到达函数的末尾时销毁container,到函数返回时,output用来指向的数组不再存在。

J.doe的答案是解决这个问题的一种解决方案,但是在为其赋值之前,您必须确保output已经指向足够大小的数组。您还可以考虑查看std::arraystd::vector

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56310367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档