C/C++参数传递的3种方式
来源:互联网 发布:锤子手机usb网络共享 编辑:程序博客网 时间:2024/06/10 23:00
C/C++参数传递的3种方式在C/C++程序设计中有3种参数传递方式
1. (单向)值传递
单向值传递一般用于C/C++程序中简单数据类型的数据作为参数传入。
#include <stdio.h>
int swap(int age1,int age2)
{
int tmp = age1;
age1 = age2;
age2 = tmp;
printf("%d %d\n",age1,age2);
return 0;
}
int main()
{
int age_1 = 20;
int age_2 = 21;
func1(age_1,age_2);
printf("%d %d\n",age_1,age_2);
return 0;
}
如上代码 age1,age2参数就是用于func1函数的输入的,虽在func1函数内部交换了age1和age2的值,但是在main函数中的age1 age2值仍然是20 21。这个就是单向传递,方向从调用函数中将值传递到被调函数中,在被调用函数中的任何对形参的改变都不会影响实参的值。
在C++程序中也可以使用这种方式,但是当单向传递的参数是结构体或者类类型的变量的时候咱们就不会考虑使用这种方法了。原因在方式2中说明。
2. 地址传递
将地址作为参数传递在C/C++中均可使用。
由第一种方式我们知道简单数据类型作为单向值传递很清晰简洁,对于复合的数据类型如果还是采用方式1的话就会带来不必要的开销。
此时我们考虑在C中使用方式2,在C++中优先考虑使用方式3.
#include <stdio.h>
int swap(int *age1,int *age2)
{
int tmp = *age1;
*age1 = *age2;
*age2 = tmp;
printf("%d %d\n",*age1,*age2);
return 0;
}
int main()
{
int age1 = 20;
int age2 = 21;
func1(&age1,&age2);
printf("%d %d\n",age1,age2);
return 0;
}
在以上代码中在主调函数中传递变量的地址,在被调函数中参数使用指针变量接受实参地址,通过对形参的解引用操作取出实参的值 借助临时变量实现两个指针指向的变量的值的交换。
方式2的中如果通过形参指针变量对其指向的地址写入了数据。那么函数在结束调用的时候写入数据的影响并不会消失。所以main函数中打印出21 20。
3. (双向)引用传递
由于引用是C++程序设计的概念,因此引用传递只能在C++程序中使用。
引用操作简单,在使用的时候当作简单的一个变量使用即可。如果在不深究期实现原理的情况下,可以简单的认为引用就是变量的一个别名即可。
#include <stdio.h>
int swap(int &age1,int &age2)
{
int tmp = age1;
age1 = age2;
age2 = tmp;
printf("%d %d\n",age1,age2);
return 0;
}
int main()
{
int age1 = 20;
int age2 = 21;
func1(age1,age2);
printf("%d %d\n",age1,age2);
return 0;
}
在C++程序设计中大量使用了对象的(常)引用,因此希望朋友们能够理解引用的用法。
0 0
- C/C++参数传递的3种方式
- C语言的3种参数传递方式
- C语言的参数传递方式
- C语言中参数的传递方式
- C语言中函数参数传递的三种方式
- C语言中函数参数传递的三种方式
- C语言:函数参数传递的三种方式
- C/C++ 函数参数的三种传递方式
- C语言中函数参数传递的三种方式
- C语言三种参数传递方式
- c/c++参数传递方式
- c语言参数传递方式
- C/C++:函数参数传递方式
- 函数参数传递方式(c/c++)
- [C]C语言中函数参数传递的三种方式(x,*x,&x)
- 第二周项目1—C++/C语言中函数参数传递的三种方式
- C语言函数参数的传递方式[原]
- c语言指针类型参数的传递方式
- Java 动态代理
- 利用ViewHolder优化BaseAdapter(ListView)
- C#动态库在Unity3D 4.5版本上可以编译通过,但在5.2版本上编译不通过的问题
- Spring框架IOC与AOP简单应用浅解-适合初入SSH框架学习
- Android中Option menu和Context menu的使用(十六)
- C/C++参数传递的3种方式
- Linux下实用的查看内存和多核CPU状态命令
- unity3d 陀螺仪代码
- EventBus使用详解(二)——EventBus使用进阶
- Android之蓝牙开发浅析
- Java字节码重写
- ORA-00060: Deadlock detected
- delphi property 实例(包含数组属性)
- 友盟SDK应用(二)------url分享