前言:
而今各位老铁们对“结构体调用函数之后值会变吗”大致比较注意,小伙伴们都需要了解一些“结构体调用函数之后值会变吗”的相关资讯。那么小编也在网络上收集了一些关于“结构体调用函数之后值会变吗””的相关资讯,希望朋友们能喜欢,你们一起来学习一下吧!1.简介
结构体,结构体指针作为函数的参数现在应用的非常广泛,但一些细微 之处还需要引起注意。本文将讨论其作为形参和实参的区别。
2.结构体作为参数
将结构体作为函数的参数,我们的目的是通过makeinfo()函数调用去改变person 结构体中letters的值。
程序运行结果如下:
运行结果正常
如果将person=makeinfo(person)改为makeinfo(person)
代码如下:
运行结果出问题
3.结构体指针作为参数
将结构体指针作为函数的参数,从而直接去改变letters的值,相关代码如下:
程序运行结果如下:
程序运行结果如下:
4.分析
在情形二与情形一比较,虽然表面上看起来情形二调用makeinfo(person)函数后,好像改变了person结构体中letters的值。但实质上调用makeinfo(person)函数中,结构体person只是作为一个形式参数,函数会创建一个新的结构体**info,person中的值被复制到新的info结构体中,之后函数的所有处理过程都是针对这个**info结构体副本。自然而然得到的 letters的值只是存储在info中,而没有存在person结构体中。这就是为什么我们看到Letters是一个随机值的原因。
结构体指针作为函数的参数,因为传送的实质就是person结构体的地址,也就是person结构体本身。makeinfo(&person)函数调用,通过使用指针pst定位把计算得到的值放在person结构体中,当然能改变其中letters的值。
我们可以用形参和实参来类比理解,传结构体相当于一个形参(形式上的参数,只是起到一个原件的作用,之后的处理都是针对其复印件而言,要想改变原件必须对原件进行赋值),传结构体指针相当于一个实参(实实在在的参数,一般是传输相关参数的地址值,改变都是对它本身而言)。
5.结构,结构指针作为参数的选择
结构作为参数的优点:
(1) 编程风格更加的直接、清晰。
(2) 由于其改变的是副本,所以比处理原始数据相比更加的安全。
结构体指针作为参数的优点:
(1) 只需要传递一个单个地址即可;
(2)处理数据更加的方便,效率较高。
但是两者也有各自的缺点,结构作为参数有时候比较浪费空间和时间,结构体指针缺少对数据的保护。
通常,为追求效率常使用结构指针作为参数,当需要保护现场或者为发生某些不必要的意外时候使用const限制,传递结构值是处理小型结构经常用到的方法,通常传递指针或只将所需的成员作为参数传递。
标签: #结构体调用函数之后值会变吗 #结构体内的结构体指针 #结构体构造函数怎么写 #结构体名作为函数参数 #结构体中的函数