C++结构体和函数传递

本文档应用在写GPS串口解析驱动时,由于指针传递没处理好,导致内存泄漏,所以重新学习结构体与函数间传递

重点体会:返回值、结构体形参之间的调用关系

#include <iostream>
using namespace std;
const double pi = 3.1415;
// 功能:实现航向角转成弧度
struct GPS
{
    float heading;
    float lat;
    float lon;
};

// 结构体做形参,函数返回值是结构体
struct GPS ang2rad_1(struct GPS gps)
{
    gps.heading = gps.heading * pi / 180;
    return gps;
};

// 结构体作为形参,函数返回值是结构体引用
struct GPS &ang2rad_2(struct GPS &gps)
{
    gps.heading = gps.heading * pi / 180;
    return gps;
};

// 结构体作为形参,与普通的类型值传递
void ang2rad_3(struct GPS gps)
{
    gps.heading = gps.heading * pi / 180;
}

// 使用结构体指针作为形参
void ang2rad_4(struct GPS *gps)
{
    if (!gps)
    {
        return;
    }
    gps->heading = gps->heading * pi / 180;
}

// 使用结构体别名作为形参
void ang2rad_5(struct GPS &gps)
{
    gps.heading = gps.heading * pi / 180;
}

int main(void)
{
    GPS gps_test1 = {100.00, 39.976823, 113.212134};

    GPS gps_test2 = {100.00, 39.976823, 113.212134};
    GPS gps_test3 = {100.00, 39.976823, 113.212134};
    GPS gps_test4 = {100.00, 39.976823, 113.212134};
    GPS gps_test5 = {100.00, 39.976823, 113.212134};

    // 使用函数的返回值
    gps_test1 = ang2rad_1(gps_test1);
    cout << "使用函数的返回值:" << endl;
    cout << gps_test1.heading << "   " << gps_test1.lat << "    " << gps_test1.lon << std::endl;

    // 结构体作为形参,函数返回值是结构体引用
    gps_test2 = ang2rad_2(gps_test2);
    cout << "结构体作为形参,函数返回值是结构体引用:" << endl;
    cout << gps_test2.heading << "   " << gps_test2.lat << "    " << gps_test2.lon << std::endl;

    // 结构体作为形参,与普通的类型值传递
    ang2rad_3(gps_test3);
    cout << "结构体作为形参,与普通的类型值传递:" << endl;
    cout << gps_test3.heading << "   " << gps_test3.lat << "    " << gps_test3.lon << std::endl;

    // 使用结构体指针作为形参
    ang2rad_4(&gps_test4);
    cout << "使用结构体指针作为形参:" << endl;
    cout << gps_test4.heading << "   " << gps_test4.lat << "    " << gps_test4.lon << std::endl;

    // 使用结构体别名作为形参
    ang2rad_5(gps_test5);
    cout << "使用结构体别名作为形参:" << endl;
    cout << gps_test5.heading << "   " << gps_test5.lat << "    " << gps_test5.lon << std::endl;

    return 0;
}

结果如下:

使用函数的返回值:
1.74528   39.9768    113.212
结构体作为形参,函数返回值是结构体引用:
1.74528   39.9768    113.212
结构体作为形参,与普通的类型值传递:
100   39.9768    113.212
使用结构体指针作为形参:
1.74528   39.9768    113.212
使用结构体别名作为形参:
1.74528   39.9768    113.212
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值