zoukankan      html  css  js  c++  java
  • C语言 结构体作为参数和返回值使用

    方案一:结构体变量作为参数,进行传值。

        编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问

    /**********************************************************************
    * 版权所有 (C)2017, Wang maochun。
    *
    * 文件名称:travel.cpp
    * 文件标识:无
    * 内容摘要:主要演示结构体作为参数以及返回值 
    * 其它说明:"传值” 
    * 当前版本:V1.0
    * 作    者:Wang maochun
    * 完成日期:2017.7.23
    *
    **********************************************************************/
    #include <iostream>
    
    struct travel_time
    {
        int hours;
        int mins;
    };
    
    const int Mins_per_hr = 60;
    
    travel_time sum(travel_time t1,travel_time t2);
    void show_time(travel_time t);
    
    int main()
    {
        using namespace std;
        travel_time day1 = {5,45};  //5 hours 45 minutes
        travel_time day2 = {4,55};  //4 housr 55 minutes
        
        travel_time trip = sum(day1,day2);
        cout << "Two-day total:";
        show_time(trip);
        
        travel_time day3 = {4,32};
        cout << "Three-day total:";
        show_time(sum(trip,day3)); 
        
        return 0;
    }
    
    travel_time sum(travel_time t1,travel_time t2)
    {
        travel_time total;
        
        total.mins = (t1.mins + t2.mins) % Mins_per_hr;
        total.hours = (t1.hours + t2.hours) + (t1.mins + t2.mins) / Mins_per_hr;
        
        return total;
    }
    
    void show_time(travel_time t)
    {
        using namespace std;
        cout << t.hours << "hours,"
             << t.mins  << "minutes
    ";
    } 

    运行结果:


    方案二:结构体指针作为参数,传地址。

        编译器不需要拷贝,和main函数采用相同地址。为了不影响origin value,使用const修饰

        使用指针指向结构体操作符(->)间接访问

    /**********************************************************************
    * 版权所有 (C)2017, Wang maochun。
    *
    * 文件名称:travel.cpp
    * 文件标识:无
    * 内容摘要:主要演示结构体作为参数以及返回值 
    * 其它说明:"传地址” 
    * 当前版本:V1.0
    * 作    者:Wang maochun
    * 完成日期:2017.7.23
    *
    **********************************************************************/
    #include <iostream>
    
    struct travel_time
    {
        int hours;
        int mins;
    };
    
    const int Mins_per_hr = 60;
    
    travel_time sum(travel_time* t1,travel_time* t2);
    void show_time(travel_time* t);
    
    int main()
    {
        using namespace std;
        travel_time day1 = {5,45};  //5 hours 45 minutes
        travel_time day2 = {4,55};  //4 housr 55 minutes
        
        travel_time trip = sum(&day1,&day2);
        cout << "Two-day total:";
        show_time(&trip);
        
        travel_time day3 = {4,32};
        cout << "Three-day total:";
        travel_time trip1 =sum(&trip,&day3);
        show_time(&(trip1)); 
        
        return 0;
    }
    
    travel_time sum(travel_time* t1,travel_time* t2)
    {
        travel_time total;
        
        total.mins = (t1->mins + t2->mins) % Mins_per_hr;
        total.hours = (t1->hours + t2->hours) + (t1->mins + t2->mins) / Mins_per_hr;
        
        return total;
    }
    
    void show_time(travel_time* t)
    {
        using namespace std;
        cout << t->hours << "hours,"
             << t->mins  << "minutes
    ";
    } 

    结果和方案一相同。

    出现的错误:

    show_time(&(sum(&day1,&day2)));这样写时,出现taking address of temporary fpermissive错误。
    原因是:
    Your middle result which is a temporary variable since it will disappear
    If you assign the result of sum(&day1,&day2) to a variable then it will no longer be a temporary and you can then take the address of it.
    因此,不能对未赋值的临时变量取地址
  • 相关阅读:
    visual studio 2010设置
    Win7 x64 PL/SQL 连接 Oralce 提示 Could not initialize "%ORACLE_HOME%\bin\oci.dll"
    jxl导入/导出excel
    struts2的action与jsp之间传递参数
    web服务器、容器和中间件
    myeclipse trial expired 注册码解决办法(可用于8.5)
    Java中的内部类
    JS的trim()方法
    struts2 <s:property>用法
    EL表达式的使用
  • 原文地址:https://www.cnblogs.com/shuqingstudy/p/7226413.html
Copyright © 2011-2022 走看看