全局函数中的static变量问题

现有:
//teststatic.cpp

void TestStatic(int nCopy)
{
   static int a = nCopy;
   cout << a << endl;
}

int main()
{
   TestStatic(1);
   TestStatic(2);
}

结果:
1
1
press any key to continue

 问题是:为什么这样的结果??

 回复内容
【taodm】:
static变量就这样的啊,只初始化一次。

【lj860603】:
static还有全局变量只能定义一次,初始化一次

【Chiyer】:
那你要什么样子

static 只在调用第一次的时候初始化

所以

   TestStatic(1);     // 这个函数初始化a 为1
   TestStatic(2);    // 这次调用就不用初始化了

你调换一下顺序就知道了

 TestStatic(2);   
   TestStatic(1);

结果应该是 
2
2    



【todototry】:
static变量初始化了之后,再次进入函数的时候,保持原的值的

【guangmingshizhe】:
static变量只定一一次,但是可以重新赋值


static int test = 10;

void TestStatic(int nCopy)
{
test = nCopy;
cout << test << endl;
}


TestStatic(20);
TestStatic(30);

结果就是20  30

【eduyu】:
void TestStatic(int nCopy)
{
   static int a = nCopy;  //这句话是初始化,不是赋值,由于static变量只能被赋值一次
                          //第二次进入这个函数,这句话可以认为“不会被执行”。

   //加这句,这句话是赋值,每次进入这个函数都会被执行。
   a=nCopy;

   cout << a << endl;
}

int main()
{
   TestStatic(1);
   TestStatic(2);
}

【eduyu】:
抱歉,打快了,不是被“赋值一次”是 “被初始化一次”。

ok,你再看看结果。

【yuyunliuhen】:
static只能初始化一次

【erac】:
static初始化一次,如果不对其进行修改还是原来的值。

【clxye】:
恩,这个问题问的好。学习了。

【jsjszg】:
对的.虽然调试的时候每次都经过初始化那一行,但并没有初始化.(除了第一次)

【Aaron_Jerry】:
TestStatic(1);
TestStatic(2);
输出的是同一个内存地址里的值

具体见:
http://dev.csdn.net/author/haoel/f10d3532658744ab87e4d4a000091b81.html

【Vitin】:
简单地说,应该这样写:
void TestStatic(int nCopy)
{
   static int a;
   a = nCopy;
   cout << a << endl;
}


【qwerasd1234】:
void TestStatic(int nCopy)
{
   static int &a = nCopy;
   cout << a << endl;
}

int main()
{
   TestStatic(1);
   TestStatic(2);
   return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值