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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这个C++程序加不加static有区别吗?相关的知识,希望对你有一定的参考价值。

#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;

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

所以去掉static , int i=a,
效果和static ,i保留原值是一样的(原值和a相等).
参考技术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 )

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;

a = 1;b = 2;
fn( b );fn( a );
cout << "a=" << a << '\t' << "b=" << b << endl;
return 0;
参考技术B 有区别,加上函数内部的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,前者是保持上次调用的结果,而后者是一个赋值动作.本回答被提问者采纳

linux里面的 tail -f 这个f参数是什么意思,加不加什么区别

-f 循环读取
假设该服务程序是一直不断的加入动态资料到/usr/adm/logs/daemon_log.txt 的 log 文件里,在命令列控制窗口中使用 tail -f,它将会以一定的时间实时追踪该档的所有更新。 ( -f 的只有在其输入为档案时才能使用 )。
参考技术A f代表强制的意思

以上是关于这个C++程序加不加static有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

JS问题 为啥我直接在onclick后写window.close不加函数,打开的时候直接闪退了?加不加函数有区别吗

加不加 synchronized 有什么区别?

linux里面的 tail -f 这个f参数是什么意思,加不加什么区别

java函数加不加static有何不同

Java中的自动行刷新,加不加true有啥区别?不加true也照样换行吧?这个true有啥用?

全局静态函数加上static和不加上有啥区别呢 尽量详细点 可加分哦