结构体变量做函数参数,使用引用和不用引用有什么区别?
一、结构体变量做函数参数,使用引用和不用引用的区别
引用实际上是变量别名。效果等同于操作原对象。不传引用新建了一个Stack副本,副本指针的改变不影响原变量,里面的指针永远指向最初的地址,导致每次只是把这块内存的值从a改到b而没有实现自增。
结构作为函数参数的三种传递方式
1.传递结构成员
2.传递结构
3.传递结构的地址
===================================
//1.传递结构成员
#include
#include
//花呗还款简单举例
struct account
{
char * bankName; //银行名称
char * userName; //用户名称
double limit; //账户当前可用额度
double max; //账户总额度
};
//计算并返回当月应还款数
double payFor(double m1,double m2)
{
return m2-m1;
}
int main()
{
//初始化数据
struct account BOC;
BOC.bankName=”中国银行”;
BOC.userName=”马小云”;
BOC.max=10000;
BOC.limit=1562;
double result=payFor(BOC.limit,BOC.max);
printf(“用户应还款%.2lf元,截至下月9日之前不算利息!\n”,result);
}
//2.传递结构
//结构体定义不变,后面照下面修改
//计算并返回当月应还款数
double payFor(struct account accounts)
{
return accounts.max-accounts.limit;
}
int main()
{
//初始化数据
struct account BOC;
BOC.bankName=”中国银行”;
BOC.userName=”马小云”;
BOC.max=10000;
BOC.limit=1562;
double result=payFor(BOC);
printf(“用户应还款%.2lf元,截至下月9日之前不算利息!\n”,result);
}
//3.传递结构的地址
//计算并返回当月应还款数
double payFor(const struct account *accounts) //因为指针指向可以改变,所以此处加上const起保护作用。
{
return accounts->max-accounts->limit;
}
int main()
{
//初始化数据
struct account BOC;
BOC.bankName=”中国银行”;
BOC.userName=”马小云”;
BOC.max=10000;
BOC.limit=1562;
double result=payFor(&BOC);
printf(“用户应还款%.2lf元,截至下月9日之前不算利息!\n”,result);
}
延伸阅读:
二、结构体参数调用归纳
1)结构体变量作为函数参数[实参与形参]时,形参结构体变量成员值的改变不影响对应的实参构体变量成员值的改变。
2)结构体数组或结构体指针变量作为函数参数[实参与形参]时,形参结构体数组元素[或形参结构体指针变量指向的变量]成员值的改变将影响对应的实参构体数组[或实参结构体指针变量指向的变量]成员值的改变。
3)结构体变量可作为函数的参数,函数可返回一结构体类数据
4)p=&b; 使结构体指针变量p指向结构体变量b的空间。
p->num:表示通过指针变量引用结构体变量b的成员num
5)p=a;或p=&a[0];将结构体指针变量指向结构体数组a。则:
①p->num:表示通过指针变量引用结构体数组元素的成员num的值。
②p->num++:表示通过指针变量先引用结构体数组元素的成员num的值,再使该元素的成员num的值加 1,先引用其值然后其加1。
③++p->num:表示使指向的元素的成员num的值加1,再引用其值。
6)p=a;或p=&a[0];表示将结构体指针变量p指向结构体数组a。
①(p++)->num:表示通过指针变量先引用结构体数组元素 的成员num的值,再使指针变量本身加1,指针变量加1表示使指针变量指向结构体数组的下一个元素。
②(++p)->num:先使指针变量本身加1,先使使指针变量指向结构体数组的下一个元素,然后引用指针变量所指向的结构体数组元素的成员num的值。

猜你喜欢LIKE
相关推荐HOT
更多>>
为什么在中断里不能sleep?
一、在中断里不能sleep的原因“为什么在中断里不能sleep”,即“为什么在Linux里,ISR被设计成不能睡眠”。sleep会导致call scheduler以选择另...详情>>
2023-10-14 20:44:46
Jupyter Notebook为什么是现代Python的必学技术?
1、整合所有资源在软件开发过程中,频繁地切换窗口会影响开发效率。举个例子,假设你需要切换窗口去看一些文档,再切换窗口去用另一个工具画图...详情>>
2023-10-14 20:11:17
Python中is和==的区别?
一、Python中is和==的区别Python 中的 is 和 == 的主要区别是== 操作符比较两个对象的值是否相等,即比较它们所包含的数据是否相同;is 操作符...详情>>
2023-10-14 18:11:35
mac任务管理器快捷键是什么?
一、mac任务管理器快捷键在Mac OS X操作系统中,任务管理器被称为活动监视器(Activity Monitor),它允许用户查看和管理正在运行的进程和资源...详情>>
2023-10-14 17:46:41热门推荐
Python10行以内代码能有什么高端操作?
沸html form标签的action属性是什么?
热TCP、UDP的区别是什么,两者在什么时候使用?
热C++中引用和指针有哪些区别?
新epoll、poll、select有哪些区别?
为什么我们需要Laravel IoC容器?
为什么在中断里不能sleep?
Jupyter Notebook为什么是现代Python的必学技术?
Promise是什么?
Python有哪些优势?
项目财务管理包括什么?
Python中is和==的区别?
mac任务管理器快捷键是什么?
Java开发为什么要用IoC和AOP?
技术干货






