C 函数传递三种方式解读
创始人
2024-06-22 15:10:38
0

C++编程语言中的函数可以以多种传递的方式来实现一些特定功能的实现。我们今天就为大家总结了这些传递方式,让大家能够对这方面的知识有一个深刻的理解。首先就让我们一起来看看C++函数传递的相关方式吧、

C++函数传递的方式总共有三种,分别为:值传递、指针传递和引用传递。

值传递:

 

  1. void fun(int x)  
  2. {  
  3. x += 5; //修改的只是y在栈中copy x,x只是y的一个副本,在内存中重新开辟的
    一块临时空间把y的值送给了x;这样也增加了程序运行的时间,降低了程序的效率。  
  4. }  
  5. void main(void)  
  6. {  
  7. int y = 0;  
  8. fun(y);  
  9. cout<<\"y = \"<

 

指针传递:

 

  1. void fun(int *x)  
  2. {  
  3. *x += 5; //修改的是指针x指向的内存单元值  
  4. }  
  5. void main(void)  
  6. {  
  7. int y = 0;  
  8. fun(&y);  
  9. cout<<<<\"y = \"<

 

 

引用传递:

 

  1. void fun(int &x)  
  2. {  
  3. x += 5; //修改的是x引用的对象值 &x = y;  
  4. }  
  5. void main(void)  
  6. {  
  7. int y = 0;  
  8. fun(y);  
  9. cout<<<<\"y = \"<

 

看了C++函数传递后我们继续来谈“const只能用于修饰输入参数”的情况。#t#

 

当输入参数用“值传递”方式时,我们不需要加const修饰,因为用值传递时,函数将自动用实际参数的拷贝初始化形式参数,当在函数体内改变形式参数时,改变的也只是栈上的拷贝而不是实际参数。

但要注意的是,当输入参数为ADT/UDT(用户自定义类型和抽象数据类型)时,应该将“值传递”改为“const &传递”,目的可以提高效率。

例如:

void fun(A a); //效率底。函数体内产生A类型的临时对象用于复制参数 a,但是临时对象的构造、复制、析构过程都将消耗时间。

void fun(A const &a); //提高效率。用“引用传递”不需要产生临时对象,省了临时对象的构造、复制、析构过程消耗的时间。但光用引用有可能改变a,所以加const

 

当输入参数用C++函数传递中的“指针传递”方式时,加const修饰可防止意外修改指针指向的内存单元,起到保护作用。

例如:

void funstrcopy(char *strdest,const char *strsrc) //任何改变strsrc指向的内存单元,编译器都将报错

些时保护了指针的内存单元,也可以保护指针本身,防止其地址改变。

例如:

  1. void funstrcopy(char *strdest,const char *const strsrc) 

以上就是对C++函数传递的三种方式的介绍。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...