C++函数三种传参形式(指针传递、引用传递、值传递)
作者:学不会2233
不论是哪种参数传递方式,都有形参和实参之分,本文主要介绍了C++函数三种传参形式(指针传递、引用传递、值传递),具有一定的参考价值,感兴趣的可以了解一下
前言
不论是哪种参数传递方式,都有形参和实参之分,都会在调用函数时进行一次复制,将实参的值赋予形参。对于值传递,实参形参概念较好区分,但对于地址传递,形参实参指向的地址相同,可能会产生操作的是同一变量的想法,实则不然。(这也是理解二级指针作用的核心知识点)
指针传递
变量形式、函数原型及对应传参形式:
- 变量:int a = 0; int *b = 0;
- 函数原型:void func(int *arg);
- 传参形式:func(&a); func(b);
解释:
函数得参数类型是int指针类型,接受的参数的一个地址。因此,对于普通变量a,需要先用&符号取地址后传入,故传入&a。对于指针b,指针就是地址,因此直接传入b即可。
#include <iostream> using namespace std; void exchange(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } int main() { int x, y; cin >> x >> y; exchange(&x, &y); cout << x << y; }
引用传递
最复杂的是引用传递。此次只讲解最基础简单的使用。
变量形式、函数原型及对于传参形式:
- 变量:int a = 0; int *b = 0;
- 函数原型:void func(int &arg);
- 传参形式:func(a); func(b);func(*b)
解释:
函数的参数类型是引用类型。对于变量a,直接传入a。对于指针b,可以选择传入地址b或者传入b指向的值*b。
区别:待定
引用的本质:待定
#include <iostream> using namespace std; void exchange(int &a, int &b) { int temp; temp = a; a = b; b = temp; } int main() { int x, y; cin >> x >> y; exchange(x, y); cout << x << " " << y; }
值传递
变量形式、函数原型及对应传参形式:
- 变量:int a = 0; int *b = 0;
- 函数原型:void func(int arg);
- 传参形式:func(a); func(*b);
解释:
函数的参数类型是int类型,接收的值是int型变量的值。因此,对于变量a,本身就是int型变量,故直接传入。对于指针变量b,是需要用*符号进行解引用获取指针指向的值,故传入*b。
#include <iostream> using namespace std; void exchange(int a, int b) { int temp; temp = a; a = b; b = temp; } int main() { int x, y; cin >> x >> y; exchange(x, y); cout << x << " " << y; }
总结:
1.引用传递和值传递都是传地址,可理解为实参和形参的内存地址相同,在函数中的赋值操作在函数结束后仍会保留(只要被赋值的变量仍存在)。而值传递传入的是实参的值,调用函数时会进行拷贝操作将实参的值赋予形参,实参和形参的地址不同,因此在函数体内对形参的赋值操作不会改变实参的值。
到此这篇关于C++函数三种传参形式(指针传递、引用传递、值传递)的文章就介绍到这了,更多相关C++函数传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!