1. 形参与实参的本质区别
在C++编程中,形参(形式参数)和实参(实际参数)是函数调用机制的核心概念。很多初学者容易混淆这两者,导致在函数设计和调用时出现各种问题。让我们先从一个简单的例子入手:
cpp复制// 形参示例
int square(int num) { // num是形参
return num * num;
}
int main() {
int value = 5;
int result = square(value); // value是实参
cout << result; // 输出25
return 0;
}
1.1 形参的深层解析
形参是函数定义时声明的参数,它们有以下几个关键特性:
-
作用域限制:形参只在函数体内有效,相当于函数的局部变量。当函数调用结束时,形参的生命周期也随之结束。
-
内存分配时机:形参的内存空间是在函数被调用时才分配的,函数执行完毕后立即释放。这与全局变量或静态变量有本质区别。
-
类型约束:形参必须明确指定数据类型,这决定了它能接收什么样的实参。例如:
cpp复制void process(double data); // 只能接收double或能隐式转换为double的类型
1.2 实参的多样性表现
实参则更加灵活多变,它可以表现为多种形式:
cpp复制int compute(int a, int b);
int main() {
int x = 10, y = 20;
// 各种实参形式
compute(5, 10); // 常量
compute(x, y); // 变量
compute(x+1, y*2); // 表达式
compute(abs(-5), rand()); // 函数返回值
}
实参的关键特点包括:
-
求值时机:所有实参在函数调用前必须完成求值,确保传递给形参的是确定的值。
-
类型兼容性:实参类型必须与形参类型兼容,或者能够隐式转换为形参类型。
-
求值顺序:C++标准没有规
