一、函数间参数传递的三种方式
1、值传递
主调函数:swap(x,y);
被调函数:void swap(int a,int b);
值传递特点分析:
- 值传递只是将主调函数中实参的值传递给被调函数的形参,通常用于将主调函数中原始数据传递给被调函数。被调函数修改形参中的数据,修改的只是数据副本,不会影响主调函数中实参的数据。
- 值传递是一种单向数据传递机制,实参可以是常量、变量或表达式。
- 值传递的好处在于被调函数程序员错误修改了形参不会影响主调函数中的实参。函数间互不干扰。
2、引用传递
主调函数:swap(x,y);
被调函数:void swap(int &a,int &b);
引用传递特点分析:
- 引用传递将被调函数的形参定义成主调函数中实参变量的引用,被调函数通过该引用间接访问主调函数中的变量。
- 引用传递是一种双向数据传递机制。被调函数修改形参实际上修改的是对应的实参。主调函数通过引用将数据传给被调函数,被调函数也通过引用修改主调函数实参的值。
- 引用传递的好处在于形参直接引用实参,不必另外分配内存可以降低占用;二是可以借此实现函数间的双向数据传递。
3、指针传递
主调函数:swap(&x,&y);
被调函数:void swap(int *a,int *b);
指针传递特点分析:
- 指针传递将主调函数中实参的内存地址传给被调函数的指针形参,被调函数通过该内存地址间接访问主调函数中的变量。
- 指针传递是一种双向数据传递机制。主调函数可以通过内存地址将数据传递给被调函数,被调函数可以通过内存地址修改主调的实参。
- 指针传递的好处在于可以通过内存地址实现双向传递,二是在传递批量数据(如数组)时只需要传递一个内存首地址,这样可以提高数据传递效率,降低内存占用。
下面为三种参数传递的实列
1 #include <iostream> 2 3 void swap1(int a, int b) 4 { 5 int t; 6 t = a; a = b; b = t; 7 } 8 void swap2(int &a, int &b) 9 { 10 int t; 11 t = a; a = b; b = t; 12 } 13 void swap3(int *a, int *b) 14 { 15 int t; 16 t = *a; *a = *b; *b = t; 17 } 18 19 int main() 20 { 21 std::cout << "Exchange x and y." << std::endl; 22 int x1 = 5, y1 = 10; 23 int x2 = 5, y2 = 10; 24 int x3 = 5, y3 = 10; 25 swap1(x1,y1); 26 swap2(x2, y2); 27 swap3(&x3, &y3); 28 std::cout << x1 << "," <<y1 << std::endl; 29 std::cout << x2 << "," << y2 << std::endl; 30 std::cout << x3 << "," << y3 << std::endl; 31 return 0; 32 } 33 //输出结果 34 Exchange xand y. 35 5, 10 36 10, 5 37 10, 5
View Code
#include <iostream>
void swap1(int a, int b)
{
int t;
t = a; a = b; b = t;
}
void swap2(int &a, int &b)
{
int t;
t = a; a = b; b = t;
}
void swap3(int *a, int *b)
{
int t;
t = *a; *a = *b; *b = t;
}
int main()
{
std::cout << “Exchange x and y.” << std::endl;
int x1 = 5, y1 = 10;
int x2 = 5, y2 = 10;
int x3 = 5, y3 = 10;
swap1(x1,y1);
swap2(x2, y2);
swap3(&x3, &y3);
std::cout << x1 << “,” <<y1 << std::endl;
std::cout << x2 << “,” << y2 << std::endl;
std::cout << x3 << “,” << y3 << std::endl;
return 0;
}
Exchange xand y.
5, 10
10, 5
10, 5
原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/272822.html