从一道面试题解析static的作用

来源:互联网 发布:java mq消息队列 编辑:程序博客网 时间:2024/06/01 11:14

浙江大华2011.10.10校园招聘会笔试题

#include <vector>int func(std::vector<int>vec){static int k = 2;std::vector<int>::reverse_iterator it;for(it = vec.rbegin(); it!=vec.rend(); ++it){k += *it%2==0? ++*it: (*it)++;}return k;}int main(void){std::vector<int>vec;for(int i = 0; i<4; i++){vec.push_back(i);printf("%d ",func(vec));}return 0;}

在做这道题的时候可能很多人会忽视关键词static,从而得出答案3、4、7、10,但正确的答案为3、5、10、18(在继续往下看之前先想想static的作用,可能你会得出答案)。

在一个源文件里面的变量如果用关键字static声明,则这个变量的作用域为这一个源文件里面,而不仅仅是在声明它的函数里面(如果其是在某函数里面声明的),每一次使用改变量时我们必须考虑到它之前的值是什么。因此在这个程序中,第一次使用func后k的值为3,由于k用static声明,因此尽管离开了函数func的作用域,但它的值还是3,以此类推。另外使用关键字static声明并定义的变量如果再次进行声明定义,则并不生效,该变量还是原来的值。

原创粉丝点击