分类:
2012-03-06 11:41:19
static修饰之后的变量和函数与之前的比较
存储方式 |
作用域 |
特殊说明 | |
全局变量+static |
未变, 仍未静态存储 |
变了,由在多个文件的全局有效,变成了: 仅在当前文件有效 |
|
局部变量+static |
变了,由函数被调用时候在栈上分配且函数调用结束,返回时,被销毁 变成了: 静态存储区 |
未变,仍是函数内 |
1.静态局部变量也像其他静态变量一样,仅被初始化一次,下一次调用该函数,而使用该变量时,其值以上一次为准。简单说就是: 仅被初始化一次,下一次值依据上一次结果。 2.正常情况,函数内的局部变量,在函数返回时,被销毁,所以不能返回局部变量的指针,但是由于声明为static后,此局部变量生命期为整个程序运行期,所以,可以返回局部静态变量的指针。 |
函数+static |
变了,由每次调用就重新有一份拷贝 变成了: 在内存中仅有一份拷贝 |
未变 |
其实static对函数的影响,类似于static对局部变量的影响,主要是对存储方式变了,即存储区域变了,由每次调用新申请,变成常驻内存静态区了。 |
【static的渊源】
术语static最开始是在C语言中意为:
退出一个快后,仍然存在的局部变量,
后来static又在C中有了第二个含义:
表示不能用来被其他文件访问的全局变量和函数
为了避免引入新的关键字,所以仍用static表示第二种含义。
最后,C++重用了这个关键字,并赋予其第三种含义:
属于一个类,但不是属于此类的任何特定对象的变量和函数
(与Java中此关键字的含义相同)