c++中函数的形参、静态局部变量和非静态局部变量有什么区别?并编写一个函数,说明他们的区别。
时间: 2024-02-01 22:15:16 浏览: 79
408函数-递归调用-全局变量和局部变量
函数的形参、静态局部变量和非静态局部变量在作用域和生命周期方面有所不同。
形参是在函数定义时声明的,用于接收传入函数的值。它们只在函数内部有作用域,在函数执行结束后就被销毁了。
静态局部变量是在函数内部声明,但是在函数调用结束后,它的值并不会被销毁,它的生命周期与整个程序的生命周期相同,即在程序运行期间都存在。静态变量只会被初始化一次,之后每次调用函数时,都会使用上一次的值。
非静态局部变量也是在函数内部声明,但是它的生命周期只在函数调用期间,函数调用结束后,它的值就被销毁了。
下面是一个示例代码,展示了这三种变量的区别:
```c++
#include <iostream>
using namespace std;
void test(int x) {
static int static_var = 0; // 静态局部变量
int non_static_var = 0; // 非静态局部变量
cout << "x = " << x << endl;
cout << "static_var = " << static_var << endl;
cout << "non_static_var = " << non_static_var << endl;
static_var++;
non_static_var++;
}
int main() {
test(1);
test(2);
test(3);
return 0;
}
```
输出结果:
```
x = 1
static_var = 0
non_static_var = 0
x = 2
static_var = 1
non_static_var = 0
x = 3
static_var = 2
non_static_var = 0
```
可以看到,静态局部变量的值在每次调用函数时都会累加,而非静态局部变量的值在每次调用函数时都被重新初始化为0。形参也可以像普通变量一样使用,在这个例子中,x就是一个形参,它的值在每次调用函数时都不同。
阅读全文