本文建议在看完“C++中的数组函数”后食用。
  结构体在某种程度上与数组有一定的相似性,就是能够包含较多的元素。不过结构体与数组相比起来,其整体性更强。整体性强的表现主要体现在一个结构体变量可以直接赋值给另一个结构体变量,就如同基本变量之间可以互相赋值一样,该表现显然与数组截然不同。该“整体性”也表明了,结构体完全可以像基本变量一样在函数调用的时候采取值传递的方式进行工作,即复制一份自己的拷贝结构体变量,令其代替自己进入函数干活。
  以下代码为结构体函数的第一种使用方法,即传递与返回结构体。该结构体函数的写法与基本变量函数的写法大体相同:

#include <iostream>
struct exampleStructure
{int variable1;int variable2;
};
exampleStructure sum(exampleStructure a,exampleStructure b);
int main()
{using namespace std;exampleStructure A={12,13};//结构体变量AexampleStructure B={14,15};//结构体变量BexampleStructure addNum=sum(A,B);cout<<"total variable1:"<<addNum.variable1<<endl;//打印出variable1的和cout<<"total variable2:"<<addNum.variable2<<endl;//打印出variable2的和cin.get();//按一个按键后退出return 0;
}exampleStructure sum(exampleStructure a,exampleStructure b)
{exampleStructure total;total.variable1=a.variable1+b.variable1;total.variable2=a.variable2+b.variable2;return total;
}


  以上的代码实现了两个结构体变量的子成员相加。以上代码可以自行脑补:如果将exampleStructure 代替为某个基本变量,整个程序的写法与构造与基本变量函数区别甚小。传递与返回结构体方法中,调用的函数sum()内生成2个参量结构体a与b,两个参量结构体分别拷贝参数结构体A与B的内容,随后在函数中工作。
  这种值传递的方法有一个明显缺点:结构体与基本变量也有本质的不同,在一些大型项目中结构体往往会拥有较多成员,值传递时拷贝内容,对内存的需求更大,会降低程序的运行速度。
  好在结构体还配套了结构体指针这个神奇的工具。传递内容嫌麻烦,那我们传递地址不就好了。在将上块结构体函数改成结构体指针函数有以下需要注意的地方:
  1.与数组名称是数组第一个元素的地址不同,结构体的名称只是个名字,如果想得到结构体的地址,那么必须使用地址运算符&。因此调用函数时需要将结构体的地址(&A)传递进去而不是将本身(A)传递进去。
  2.函数中的形参为一个结构体指针(*a),如果函数不需要修改内容,则应加入const修饰符防止内容被修改。
  3.函数中的形参是结构体指针,结构体指针调用变量应用符号->。
  以下为修改后的“结构体指针”函数。

#include <iostream>
struct exampleStructure
{int variable1;int variable2;
};
exampleStructure sum(const exampleStructure *a,const exampleStructure *b);
int main()
{using namespace std;exampleStructure A={12,13};//结构体变量AexampleStructure B={14,15};//结构体变量BexampleStructure addNum=sum(&A,&B);cout<<"total variable1:"<<addNum.variable1<<endl;//打印出variable1的和cout<<"total variable2:"<<addNum.variable2<<endl;//打印出variable2的和cin.get();//按一个按键后退出return 0;
}exampleStructure sum(const exampleStructure *a,const exampleStructure *b)
{exampleStructure total;total.variable1=a->variable1+b->variable1;total.variable2=a->variable2+b->variable2;return total;
}

  这样用指针还不过瘾,我将“结构体指针”函数又修改成了“结构体指针”指针函数,但是好像还不如“结构体指针”函数来的简单,以下是修改后的代码:

#include <iostream>
struct exampleStructure
{int variable1;int variable2;
};
exampleStructure *sum(const exampleStructure *a,const exampleStructure *b);
exampleStructure *sum(const exampleStructure *a,const exampleStructure *b)
{exampleStructure add;exampleStructure *total=&add;total->variable1=a->variable1+b->variable1;total->variable2=a->variable2+b->variable2;return total;
}
int main()
{using namespace std;exampleStructure A={12,13};//结构体变量AexampleStructure B={14,15};//结构体变量BexampleStructure *addNum=sum(&A,&B);cout<<"total variable1:"<<addNum->variable1<<" total variable2:"<<addNum->variable2<<endl;//打印出variable1与varaible2的和cin.get();//按一个按键后退出return 0;
}


  矩阵论老师说,如果总是想着用小窍门和奇思妙想来解决问题,往往说明你没有掌握更高级的方法。在C++中提出了新的复合类型——引用变量,可以方便解决参数数据大的问题。下一节将仔细说明引用与结构体函数的使用方法。

C++中的结构体函数(一)相关推荐

  1. C++中的结构体函数

    代码 #include "stdafx.h" struct Test {     int num; Test() { printf("11111111");   ...

  2. 【C 语言】文件操作 ( 读取文件中的结构体数组 | feof 函数使用注意事项 )

    文章目录 一.读取文件中的结构体数组 | feof 函数使用注意事项 二.代码示例 一.读取文件中的结构体数组 | feof 函数使用注意事项 读取文件结构体时 , 可以循环读取文件中的数据 , 只使 ...

  3. x264中重要结构体参数解释,参数设置,函数说明

    x264中重要结构体参数解释 http://www.usr.cc/thread-51995-1-3.html x264参数设置 http://www.usr.cc/thread-51996-1-3.h ...

  4. matlab单元数组与结构体的区别,MATLAB中的结构体和单元数组

    MATLAB中的结构体和单元数组 一.结构: x.real=10 x.imag=5 增加字段 x.scale=1 使用struct函数 s=struct('field1',values1,'field ...

  5. linux 中 timeval结构体 - Neddy11 - 博客园

    linux 中 timeval结构体 - Neddy11 - 博客园 linux 中 timeval结构体 网上很多人写到,timeval结构解释错误 ************************ ...

  6. 【C 语言】文件操作 ( 学生管理系统 | 命令行接收数据填充结构体 | 结构体写出到文件中 | 查询文件中的结构体数据 )

    文章目录 一.学生管理系统 二.代码示例 一.学生管理系统 前两篇博客 [C 语言]文件操作 ( 将结构体写出到文件中并读取结构体数据 | 将结构体数组写出到文件中并读取结构体数组数据 ) [C 语言 ...

  7. C++中的结构体,C管理进程代码,C++管理进程代码,C语言中的联合体

     1.C++中的结构体 #include<iostream> struct lstruct { int num; }; struct MyStruct { int num; doubl ...

  8. Matlab中的结构体

    结构体类型可以把不同数据类型的变量放到同一个变量名下,通过不同的"域"的概念对结构体中的数据进行赋值,操作.结构体中的数据存储在相应的"域"中. 结构体的创建有 ...

  9. C++工作笔记-结构体与类的进一步探究(在C++中的结构体,非C语言结构体)

    今天把Qt Creator中的项目放到VS上,使用MSVC编译器发现跑不动链接错误,报的是如下的这个错误: 我在Qt上用MinGW明明不会报错,而他却说链接不到,日了个狗. 后面根据报错提示,我把如下 ...

最新文章

  1. 项目经理应该知道的97件事 --译者序
  2. 牛客多校1 - Infinite Tree(虚树+换根dp+树状数组)
  3. json 文件打读取
  4. 9种深度学习算法简介
  5. 【活体检测】二分类活体检测评价方式
  6. aboboo 上一句 快捷键_电脑软件推荐|这几个快捷键你一定能用得上
  7. 【AI专利】中国成为全球AI专利第二大提交国,微软AI专利数比你论文字数都多...
  8. 【java】ThreadLocal 内存泄漏 代码演示 实例演示
  9. mybatisplus多表关联查询_Excel、MySQL、PowerBI、Python来告诉你 数据关联与联合不一样
  10. cmake设置了CMAKE_MODULE_PATH,include找不到文件
  11. 1.Linux性能诊断 --- 入门命令100条
  12. js a标签下载文档
  13. 管理服务之间的依赖关系
  14. k-Nearest Neighbors(k近邻算法)
  15. 智能优化与机器学习结合算法实现数据预测matlab代码清单
  16. webRTC(十):webrtc 实现web端对端视频
  17. Java基础7 循环语句for、while、do-while
  18. 马尔萨斯人口论与数学模型
  19. 回归分析在计算机中的应用,应用回归分析(何晓群)学习笔记
  20. 人类\经济\太阳,管他呢

热门文章

  1. 用 js判断 一个数是否是素数(质数)_JS专题之memoization
  2. Excel根据表格月份内容创建1-12月的文件夹?
  3. [MATLAB]基本操作与矩阵输入
  4. AI助力90.4%双11前端模块自动生成
  5. JAVA获取优酷、土豆、酷6、6间房等视频
  6. 带火中台的阿里,正携城市大脑席卷全国
  7. 微信公众号一次二次转发链接地址是IP和图片不显示,转换成文字和图片分享到朋友圈问题
  8. 印刷包装行业逐步“内卷”化,企业该如何冲出低利润怪圈?
  9. Nginx安装及配置教程
  10. 传承德国工匠精神 Develop德凡将带来全新文印体验