这个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不加函数,打开的时候直接闪退了?加不加函数有区别吗
linux里面的 tail -f 这个f参数是什么意思,加不加什么区别