这个C++程序加不加static有区别吗?

来源:百度知道 编辑:UC知道 时间:2024/09/24 09:26:01
#include<iostream>
using namespace std;
int a,b;
void f(int j){
static int i=a;
int m,n;
m=i+j;i++;j++;n=i*j;a++;
cout<<"i="<<i<<'\t'<<"j="<<j<<'\t';
cout<<"m="<<m<<'\t'<<"n="<<n<<endl;
}

int main(){
a=1;b=2;
f(b);f(a);
cout<<"a="<<a<<'\t'<<"b="<<b<<endl;
return 0;
}

有区别,加上函数内部的static(静态)变量只有在第一次调用时候才初始化,以后调用维持上次调用完的结果.

对于本程序结构是一样的,可是原理不一样.

如果加上static,调用f(b)时候i被初始化为a的值1(i = a),执行完以后i的值是2.调用f(a)i的值保持2不便(不是因为执行i = a使i = 2的).

如果加上static,调用f(b)时候i被初始化为a的值1(i = a),执行完以后i的值是2.调用f(a),执行i = a使i = 2.

调用f(a)时候,同样是i = 2,前者是保持上次调用的结果,而后者是一个赋值动作.

这个程序里没有区别,
因为你i和a都操作都是同步的,
有i++;的地方就有a++,
所以a和i一直是相等的.

所以去掉static , int i=a,
效果和static ,i保留原值是一样的(原值和a相等).

输出结果没有区别。
因为,始终使用全局变量a
测试程序如下:

#include<iostream>
using namespace std;
int a, b;

void f( int j )
{
static int i = a;
int m, n;
m = i + j; i++; j++; n = i * j; a++;
cout << "i=" << i << '\t' << "j=" << j << '\t';
cout << "m=" << m << '\t' << "n=" << n << endl;
}
void fn( int j )
{