从C ++中的函数返回数组

user123456098

美好的一天:)我正在编写一个代码,用于从加速度计和陀螺仪获取俯仰,偏航和侧倾角。为了创建易于使用的简洁代码,我采用了创建两个不同函数的方法。一个用于陀螺仪来计算俯仰和横滚,另一个用于加速度计,它也可以执行相同的操作。

float *readGyro(){
    /*get data from sensor here*/
    float gyroAngles[4]={gyroPitch,gyroRoll,gyroYaw};
    float* gyroPRY=gyroAngles;
    return gyroPRY;
}

float *readAccel(){
    /*get data from sensor here*/
    float accelAngles[4]={accelPitch,accelRoll,accelYaw};
    float* accelPRY=accelAngles;
    return accelPRY;
}

如您在上面看到的,我将函数的输出存储到一个数组中以传递到主函数中。基本上,指针被传递。但是,从传递的指针访问值时,将打印恒定的垃圾值(当我移动IMU时不会更改)(例如2.38221e-44和-3.84146e-06)。通过打印这些功能中的值,我检查了陀螺仪和加速度计的功能输出,结果很好。

int main(void){
    float *accelData;
    float *gyroData;

    while(1){
    accelData=readGyro();
    gyroData=readAccel();

    float accelPitch=*(accelData);
    float accelRoll=*(accelData+1);
    float accelYaw=*(accelData+2);

    float gyroPitch=*(gyroData);
    float gyroRoll=*(gyroData+1);
    float gyroYaw=*(gyroData+2);

    cout << "AccelPitch=" << accelPitch <<endl;
    cout << "AccelRoll=" << accelRoll <<endl;
    cout << "AccelYaw=" << accelYaw <<endl;
    cout << "GyroPitch=" << gyroPitch <<endl;
    cout << "GyroRoll=" << gyroRoll <<endl;
    cout << "GyroYaw=" << gyroYaw <<endl;

    }
}

我找不到我的代码做错了什么。在此之前,我查阅了许多参考资料。但是我仍然无法解决。您的帮助将不胜感激:)

保罗·鲁尼

您正在做的事情永远不会起作用,因为您正在将指针返回到readGyroand的堆栈上readAccel当这些函数退出时,将回收堆栈的该部分,并且您将拥有未定义的行为。

一种方法是分配数组并返回它,但随后您也不得不删除该分配,这使您负担沉重。

您可以为所需的参数创建2个结构,并将它们传递到函数中。这样,函数可以在返回后仍会保留的地方写东西。

例如

#include <iostream>

using std::cout;
using std::endl;

struct gyro_data_t
{
    float pitch;
    float roll;
    float yaw;
};

struct accel_data_t
{
    float pitch;
    float roll;
    float yaw;
};

void readGyro(gyro_data_t* gd)
{
    /*get data from sensor here*/
    gd->pitch = 1.0f;
    gd->roll = 1.1f;
    gd->yaw = 1.2f;
}

void readAccel(accel_data_t* ad)
{
    /*get data from sensor here*/
    ad->pitch = 1.0f;
    ad->roll = 1.1f;
    ad->yaw = 1.2f;
}

int main(void)
{
    accel_data_t accelData;
    gyro_data_t gyroData;

    while(1)
    {
        readGyro(&gyroData);
        readAccel(&accelData);

        cout << "AccelPitch=" << accelData.pitch << endl;
        cout << "AccelRoll=" << accelData.roll << endl;
        cout << "AccelYaw=" << accelData.yaw << endl;
        cout << "GyroPitch=" << gyroData.pitch << endl;
        cout << "GyroRoll=" << gyroData.roll << endl;
        cout << "GyroYaw=" << gyroData.yaw << endl;
    }
}

请注意,这比示例更易读,因为它显式地命名了每个变量,而不是将它们表示为与返回值的偏移量。分配给新变量使您无需再理解值的含义。

这两个结构实际上是相同的,因此如果需要,可以将其浓缩为一个通用结构。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

从C中的函数返回数组

来自分类Dev

从C ++中的函数返回数组

来自分类Dev

从C函数中的数组中返回项目

来自分类Dev

函数返回指针与函数返回数组在C中

来自分类Dev

从C ++中的函数返回多个数组

来自分类Dev

从C中的函数返回合并的数组

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

从C ++中的函数返回多个数组

来自分类Dev

从C ++中的函数返回指向数组的指针?

来自分类Dev

在C函数中返回char数组

来自分类Dev

检索返回C ++中数组的函数的输出

来自分类Dev

从C ++函数返回数组

来自分类Dev

返回数组C函数

来自分类Dev

从C函数中创建的数组返回数组元素?

来自分类Dev

从C#中的C ++函数返回数组和结构

来自分类Dev

如何在C / C ++函数中返回char *数组?

来自分类Dev

在函数中传递2d数组-从C中的函数返回2d数组

来自分类Dev

从C中的函数返回char数组的首选方法

来自分类Dev

如何从C头文件中的函数返回多维字符数组

来自分类Dev

在cython中返回numpy数组定义的c函数

来自分类Dev

函数返回指向C中数组类型的指针

来自分类Dev

从C中的函数传递和返回2个数组

来自分类Dev

Python中的C函数:返回数组和变量

来自分类Dev

从C ++中的函数返回2D char数组并打印

来自分类Dev

在C中返回字符串数组的函数

来自分类Dev

函数可以在C中同时返回数组和变量吗?

来自分类Dev

如何将数组从函数“返回”到c中的main

来自分类Dev

从C中的函数返回整数数组值