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

    编译器需要拷贝,不影响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语言 结构体作为参数和返回值使用的更多相关文章

  1. go语言结构体作为函数参数,采用的是值传递

    经过验证,go语言结构体作为函数参数,采用的是值传递.所以对于大型结构体传参,考虑到值传递的性能损耗,最好能采用指针传递. 验证代码: package main import ( "fmt& ...

  2. go语言结构体

    定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...

  3. c语言结构体可以直接赋值

    结构体直接赋值的实现 下面是一个实例: #include <stdio.h> struct Foo { char a; int b; double c; }foo1, foo2; //de ...

  4. Linux C语言结构体-学习笔记

    Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...

  5. 06. Go 语言结构体

    Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...

  6. Go语言 - 结构体 | 方法

    自定义类型和类型别名 自定义类型 在Go语言中有一些基本的数据类型,如string.整型.浮点型.布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型 ...

  7. 漫谈C语言结构体

    相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...

  8. 漫谈C语言结构体【转】

    相信大家对于结构体都不陌生.在此,分享出本人对C语言结构体的学习心得.如果你发现这个总结中有你以前所未掌握的,那本文也算是有点价值了.当然,水平有限,若发现不足之处恳请指出.代码文件test.c我放在 ...

  9. C/C++语言结构体指针的使用

    C/C++语言结构体指针的使用 主要内容 结构体的使用 - 定义,赋值,结构体指针 结构体作为函数参数的使用 指针的使用 代码内容重点 结构体的使用 - 定义,赋值,结构体指针 结构体作为函数参数的使 ...

随机推荐

  1. 20130501-Twitter向全美用户开放广告平台Twitter Ads

    腾讯科技讯(晁晖)北京时间5月1日消息,据国外媒体报道,Twitter今天向所有美国用户开放了广告平台Twitter Ads.自2012年3月发布以来,Twitter Ads只向受邀请用户开放.Twi ...

  2. P4tutorial实战

    Tutorial样例实战 GitHub仓库地址 参考博客 实验一:SIGCOMM_2015/Sourse_Routing 实验环境: OS:Ubuntu16.04 bmv2:behavioral-mo ...

  3. 第二章:Internet地址结构

    引言 本章主要介绍了: 如何为Internet中的设备分配IP地址. 有助于理由可扩展性的地址结构分配方式. 特殊用途的地址. 表示IP地址 IPv4地址 长32位,采用点分四组或点分十进制来表示. ...

  4. (五)hadoop系列之__集群搭建SSH无密访问多台机器

    免密码ssh设置 现在确认能否不输入口令就用ssh登录localhost: $ ssh localhost 如果不输入口令就无法用ssh登陆localhost,执行下面的命令: . 并修改hosts映 ...

  5. Node.js系列——(1)安装配置与基本使用

    1.安装 进入下载地址 小编下载的是msi文件,下一步下一步傻瓜式安装. 打印个hello看看: 2.REPL 全称Read Eval Print Loop,即交互式解释器,可以执行读取.执行.打印. ...

  6. web_config配置

    <configuration>    <system.web>      <compilation debug="true" targetFramew ...

  7. Android Studio -导入项目 gradle处理

    如果导入 android studio 项目, 那么一定要注意 需要合适的gradle版本,具体方法为: 首先导入步骤: 打开android studio ==> File ==> New ...

  8. nest

    d3.nest d3.nest表示一种嵌套结构.之所以成为嵌套是因为可以指定多个key访问器,这些访问器是一层一层嵌套的. 作用 将数组中的元素对象,按照key方法指定的属性,分组为层次结构.与SQL ...

  9. compareTo 返回为整数 调用者比参数大;返回负数 调用者比参数小

    compareTo 返回为整数 调用者比参数大;返回负数 调用者比参数小

  10. solr源码分析之solrclound

    一.简介 SolrCloud是Solr4.0版本以后基于Solr和Zookeeper的分布式搜索方案.SolrCloud是Solr的基于Zookeeper一种部署方式.Solr可以以多种方式部署,例如 ...