博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基础:C函数参数传递
阅读量:6313 次
发布时间:2019-06-22

本文共 972 字,大约阅读时间需要 3 分钟。

要想了解参数传递,首先得了解参数变量,参数变量常见的表示实现有int & x、int* x、int x、int** x等。

1、int& x表示:int&表示引用类型,x表示引用变量名,引用类型不会开辟新的地址空间,只是传递参数的别名。

2、int*  x表示:  int*表示整数指针类型,x表示指针变量名,指针类型会开辟新的地址空间,x存储新开辟的地址空间,*x表示新开辟的地址空间存储的值。

3、int x表示:int表示整数类型,x表示整型变量名,整数类型会开辟新的地址空间,x存储整数值,&x表示存储整数值的地址空间。

4、int ** x表示:int**表示整数二级指针,x表示指针表量名。指针类型会开辟新的地址空间,x存储一级指针的地址空间,*x表示一级指针,存储二级指针的地址空间,

**x表示二级指针,存储整数值。

参数传递包括地址传递和值传递,地址传递又包括引用传递和指针传递。通过下面的例子来看看他们的区别:

void funy(int& x){    std::cout<<"     funy1=地址:"<<&x<<";地址存的值:"<
<

通过结果,我们可以看到:

1、*加变量,此变量必须存储的是地址,则得到此地址存储的值;

2、&加变量,则得到存放此变量的地址。

3、变量x1和函数funy里参数x是同一个地址,因此改变x的值,x1的值也发生变化。参数x,前面的int&类型,表明x是一个引用类型,不会开辟新地址空间,只是变量x1的别名,就是说x和x1是同一个变量。这就是引用传递。 

4、变量x2和和函数funp里参数x不是同一个地址,x2的地址是0x7fff5fbfe5a8,x的地址是0x7fff5fbfdab8,变量x存储的值是x2的地址,可通过*x去改变变量x2地址存储的值。x2和x是两个不同变量。这就是指针传递。

5、变量x3和函数funv里参数x不是同一个地址,参数传递时,只是将变量x3存储的值赋值给变量x,通过变量x,无法得到变量x3的地址,也就无法改变变量x3的值。x3和x是两个不同变量。这就是值传递。
6、可以看到引用传递和指针传递,有些类似的作用;但它们各有优点,引用传递不会生成新的变量,节省空间,但是不能传NULL,而指针传递会产生新的变量,但可以传NULL。

转载地址:http://csoxa.baihongyu.com/

你可能感兴趣的文章
HDU 3879 Base Station 最大权闭合图
查看>>
Codeforces 486C Palindrome Transformation(贪心)
查看>>
Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】
查看>>
linux svn启动和关闭
查看>>
Android 开源库获取途径整理
查看>>
Vector的浅析
查看>>
struts2 result type类型
查看>>
RHEL 7 命令行注册和激活订阅服务
查看>>
redis使用日志(二) 数据存储到redis
查看>>
NOT IN、NOT EXISTS的相关子查询改用LEFT JOIN--sql2000性能优化
查看>>
memcached 安装
查看>>
ANNOTATION PROCESSING 101 by Hannes Dorfmann — 10 Jan 2015
查看>>
B-树、B+树、B*树的区别
查看>>
网络广告CPS/CPC/CPV/CPM/CPA分别是什么意思
查看>>
NOIP2003传染病控制[按层DFS]
查看>>
浅谈测试rhel7新功能时的感受及遇到的问题【转载】
查看>>
mysql及php命名规范
查看>>
Nginx+Tomcat+Memcached 实现集群部署时Session共享
查看>>
【转载】数据结构与算法设计
查看>>
配置 DHCP 服务 - 每天5分钟玩转 OpenStack(89)
查看>>