形参变量:
形参变量是功能函数里的变量,只有在被调用的时候才分配内存单元,调用结束后立即释放。所以形参只在函数内部有效。
实参变量:
实参可以是常量,变量,表达式,函数等等,但无论是何类型,在进行函数调用是,他们必须有确定的值,以便把这些值拷贝给形参。
值传递、引用传递和指针传递在函数调用时处理参数的方式有所不同
值传递
值传递是指在调用函数时,将实际参数的值复制一份传递给函数的形式参数(拷贝副本)。值调用传递的是变量的副本,在函数内部对形参的任何修改都不会影响到实参。
void func(int a)
- 单向性:值传递是单向的,只能从实参传递到形参
- 独立性:形参和实参是两个独立的变量,它们在内存中占据不同的空间
- 不改变实参:在函数内部对形参的修改不会影响到实参的值
示例
#include <iostream>
using namespace std;
void func(int a) {
a = 10; // 修改的是局部变量
}
int main() {
int x = 5;
func(x);
cout << x; // 输出: 5
}
引用传递
引用传递是指在调用函数时,将实际参数的地址(引用)传递给函数的形式参数。函数内部对形参的修改会影响到实参。
函数参数声明为引用(使用
&
符号),则为引用传递 void func(int& a)
示例
#include <iostream>
using namespace std;
void func(int& a) {
a = 10; // 修改外部变量
}
int main() {
int x = 5;
func(x);
cout << x; // 输出: 10
}
声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象,被初始化后,就不能改为指向其它对象
特点
- 双向性:引用传递是双向的,形参和实参之间是直接关联的。
- 共享性:形参和实参共享同一内存地址,修改形参会直接影响实参
- 可能改变实参:在函数内部对形参的修改会影响到实参的值。
不太懂引用的可以看一下这篇文章
指针传递
指针传递实际上是一种特殊的值传递,它传递的是实际参数(变量的地址)的值给形式参数(指针变量)。虽然从表面上看是传递了地址,但实际上传递的是地址的值
引用实际上是变量的别名。传递参数的地址,函数可以通过指针直接操作原始数据。
通过解引用指针,可以修改原始变量的值。
函数参数声明为指针(使用
*
符号),则为指针传递 void func(int* a)
示例
#include <iostream>
using namespace std;
void func(int* a)
{
*a = 10; // 通过指针修改外部变量
}
int main() {
int x = 5;
func(&x); // 传递 x 的地址
cout << x; // 输出: 10
}
特点:
- 双向性:指针传递也是双向的,通过指针可以访问和修改实参
- 地址传递:传递的是实参的地址,允许在函数内直接操作外部变量
- 可能改变实参:在函数内部通过指针修改的值会影响到实参
应用场景:值传递适用于保护原始数据不被修改的场景;引用传递适用于需要修改原始数据且节省空间的场景;指针传递则提供了更高的灵活性和直接访问内存的能力
标签:参数传递,形参,int,传递,详解,func,实参,指针 From: https://blog.csdn.net/Z15922342915/article/details/142500314