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 = ; travel_time sum(travel_time t1,travel_time t2);
void show_time(travel_time t); int main()
{
using namespace std;
travel_time day1 = {,}; //5 hours 45 minutes
travel_time day2 = {,}; //4 housr 55 minutes travel_time trip = sum(day1,day2);
cout << "Two-day total:";
show_time(trip); travel_time day3 = {,};
cout << "Three-day total:";
show_time(sum(trip,day3)); return ;
} 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\n";
}
运行结果:

方案二:结构体指针作为参数,传地址。
编译器不需要拷贝,和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 = ; travel_time sum(travel_time* t1,travel_time* t2);
void show_time(travel_time* t); int main()
{
using namespace std;
travel_time day1 = {,}; //5 hours 45 minutes
travel_time day2 = {,}; //4 housr 55 minutes travel_time trip = sum(&day1,&day2);
cout << "Two-day total:";
show_time(&trip); travel_time day3 = {,};
cout << "Three-day total:";
travel_time trip1 =sum(&trip,&day3);
show_time(&(trip1)); return ;
} 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\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.
因此,不能对未赋值的临时变量取地址
C语言 结构体作为参数和返回值使用的更多相关文章
- go语言结构体作为函数参数,采用的是值传递
经过验证,go语言结构体作为函数参数,采用的是值传递.所以对于大型结构体传参,考虑到值传递的性能损耗,最好能采用指针传递. 验证代码: package main import ( "fmt& ...
- go语言结构体
定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...
- c语言结构体可以直接赋值
结构体直接赋值的实现 下面是一个实例: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //de ...
- Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- 06. Go 语言结构体
Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...
- Go语言 - 结构体 | 方法
自定义类型和类型别名 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型 ...
- 漫谈C语言结构体
相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...
- 漫谈C语言结构体【转】
相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...
- C/C++语言结构体指针的使用
C/C++语言结构体指针的使用 主要内容 结构体的使用 - 定义,赋值,结构体指针 结构体作为函数参数的使用 指针的使用 代码内容重点 结构体的使用 - 定义,赋值,结构体指针 结构体作为函数参数的使 ...
随机推荐
- mysql优化建议21条
转自: http://blog.csdn.net/waferleo/article/details/7179009 今 天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于 ...
- 《数据结构与算法JavaScript描述》中的一处错误
最近在看<数据结构与算法JavaScript描述>这本书,看到选择排序这部分时,发现一个比较大的错误. 原书的选择排序算法是这样的: function selectionSort() { ...
- PSP表格记录功能
关于王者荣耀交流协会的PSP表格记录功能,就是针对我们平时做表格时候遇到问题的简化与解决.这部分功能可以记录我们开始时间,暂停时间,结束时间,并自动计算出各个时间段的净时间.只要你开始工作时点一下开始 ...
- 福大软工1816:Beta(6/7)
Beta 冲刺 (6/7) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务 文字/口头描述 组织会议 开发wxpy部分功能 展示G ...
- DP--HDU 1003(最大子串和)
问题描述: 给定整数A1, A2,--AN (可能有负数),求I到j的最大值. 例如: -2, 11, -4, 13, -5, -2时答案为20 对于这个问题的算法 ...
- 《剑指offer》--- 两个链表的第一个公共结点
本文算法使用python3实现 1. 问题 输入两个链表,找出它们的第一个公共结点. 时间限制:1s:空间限制:32768K 2 思路描述 使用两个指针 $ p1,p2 $ 分别指向两个链 ...
- 操作系统cmd
实验一 命令解释程序的编写(两周内) 一.目的和要求 1. 实验目的 (1)掌握命令解释程序的原理: (2)*掌握简单的DOS调用方法: (3)掌握C语言编程初步. 2.实验要求 编写类似于DOS, ...
- MySQL 事务 转自菜鸟教程 讲的清晰
MySQL 事务 MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数 ...
- mybatis update数据时无异常但没更新成功;update异常时如数据超出大小限制,造成死锁
没更新的问题原因: sqlSession.commit(); 没执行commit,但官方文档里有这样的描述:“默认情况下 MyBatis 不会自动提交事务,除非它侦测到有插入.更新或删除操作改变了数据 ...
- Laravel 框架集成 UEditor 编辑器的方法
㈠. 背景 在项目开发的过程中,免不了使用修改功能,而富文本编辑器是极为方便的一种推荐,当然,个人认为 MarkDown 更为简单,但是感觉暂时只适合程序猿 此文介绍如何在 Laravel5.5 ...