博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c语言返回结构体属于值返回还是地址返回,C语言 结构体作为参数和返回值使用...
阅读量:4964 次
发布时间:2019-06-12

本文共 2658 字,大约阅读时间需要 8 分钟。

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

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

/**********************************************************************

* 版权所有 (C)2017, Wang maochun。

*

* 文件名称:travel.cpp

* 文件标识:无

* 内容摘要:主要演示结构体作为参数以及返回值

* 其它说明:"传值”

* 当前版本:V1.0

* 作 者:Wang maochun

* 完成日期:2017.7.23

*

**********************************************************************/#include

structtravel_time

{inthours;intmins;

};const int Mins_per_hr = 60;

travel_time sum(travel_time t1,travel_time t2);voidshow_time(travel_time t);intmain()

{using namespacestd;

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;returntotal;

}voidshow_time(travel_time t)

{using namespacestd;

cout<< t.hours << "hours,"

<< t.mins << "minutes\n";

}

运行结果:

358502a5d2e66b74c078a5829b84213b.png

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

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

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

/**********************************************************************

* 版权所有 (C)2017, Wang maochun。

*

* 文件名称:travel.cpp

* 文件标识:无

* 内容摘要:主要演示结构体作为参数以及返回值

* 其它说明:"传地址”

* 当前版本:V1.0

* 作 者:Wang maochun

* 完成日期:2017.7.23

*

**********************************************************************/#include

structtravel_time

{inthours;intmins;

};const int Mins_per_hr = 60;

travel_time sum(travel_time* t1,travel_time*t2);void show_time(travel_time*t);intmain()

{using namespacestd;

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;returntotal;

}void show_time(travel_time*t)

{using namespacestd;

cout<< t->hours << "hours,"

<< t->mins << "minutes\n";

}

结果和方案一相同。

出现的错误:

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.

因此,不能对未赋值的临时变量取地址

原文:http://www.cnblogs.com/shuqingstudy/p/7226413.html

你可能感兴趣的文章
SELECT LOCK IN SHARE MODE and FOR UPDATE
查看>>
Perl/Nagios – Can’t locate utils.pm in @INC
查看>>
目录导航「深入浅出ASP.NET Core系列」
查看>>
简易爬虫(爬取本地数据)
查看>>
python 进程间通信
查看>>
深拷贝 vs 浅拷贝 释放多次
查看>>
Javascript 有用参考函数
查看>>
点群的判别(三)
查看>>
GNSS 使用DFT算法 能量损耗仿真
查看>>
【转】Simulink模型架构指导
查看>>
MYSQL数据库的导出的几种方法
查看>>
SQL Server-5种常见的约束
查看>>
硬件之美
查看>>
[转载]java开发中的23种设计模式
查看>>
表格的拖拽功能
查看>>
函数的形参和实参
查看>>
文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号
查看>>
1Caesar加密
查看>>
【TP SRM 703 div2 500】 GCDGraph
查看>>
MapReduce 重要组件——Recordreader组件 [转]
查看>>