全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

结构体变量做函数参数,使用引用和不用引用有什么区别?

发布时间:2023-10-11 07:36:27
发布人:xqq

一、结构体变量做函数参数,使用引用和不用引用的区别

引用实际上是变量别名。效果等同于操作原对象。不传引用新建了一个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的值。

#it技术干货

相关文章

数据结构里的间界叠加是什么意思?

数据结构里的间界叠加是什么意思?

2023-10-11
数据结构中的算法设计题需要写哪些步骤?

数据结构中的算法设计题需要写哪些步骤?

2023-10-11
二叉树终端结点和叶子结点有区别吗?

二叉树终端结点和叶子结点有区别吗?

2023-10-11
图数据结构(graph)有什么作用?

图数据结构(graph)有什么作用?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取