c/c++的static的作用和特点总结
2015-02-28 17:51
148 查看
c/c++的static的作用和特点:
(1)变量可见范围的控制:
加static前缀的全局变量和函数只在本源文件有全局性, 在其他源文件中则是不可见的.
eg: sub.c 文件中有个 static int num 的静态全局变量. 则在main.c文件中无法使用该变量.
注意:必须是sub.c ,不能是sub.h.
sub.c:
main.c:
运行结果: 888
(2)静态属性具有持久性:
其实全局变量本身就是静态存储的! 全局变量不会因为子函数结束而销毁, 包括加了static的全局变量.
普通局部变量的话, 函数结束自动销毁. 而加了static的局部变量就有静态属性了, 也即函数结束不会销毁, 但
是依旧是局部变量, 只对本函数可见.
(3)初始化只执行一次, 默认为0:
静态变量只能初始化一次; 若程序员没有在初始化时设定具体数值时,
系统默认初始化为0. 如static int b; 其
实这一句已经对b进行初始化了, b=0; 具体看下面的例子!
(PS:普通的全局变量有静态属性,因此系统也会默认将其初始化)
eg:
运行结果: 5432199999
/************************************************************************************/
补充个人理解:
(1)
c++的class里面的static变量, 一般看到第一反应就是: 全局变量.
class里面的普通成员只有在创造出对象的时候才会分配内存.
但static的变量则在class建立的时候就分配了静态内存, 而且这个变量在函数外面, 故拥有全局性, 而且能独立于对象而存在.
类的static例子:
运行结果: 0
(2)
关于static函数与普通函数的区别?(转)
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数
(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该
在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
(1)变量可见范围的控制:
加static前缀的全局变量和函数只在本源文件有全局性, 在其他源文件中则是不可见的.
eg: sub.c 文件中有个 static int num 的静态全局变量. 则在main.c文件中无法使用该变量.
注意:必须是sub.c ,不能是sub.h.
sub.c:
static int num=100; int id=888;
main.c:
#include <iostream> using namespace std; extern int id; //必须加extern, 不然id是随机数 //extern int num; 会报错 int main() { cout<<id; }
运行结果: 888
(2)静态属性具有持久性:
其实全局变量本身就是静态存储的! 全局变量不会因为子函数结束而销毁, 包括加了static的全局变量.
普通局部变量的话, 函数结束自动销毁. 而加了static的局部变量就有静态属性了, 也即函数结束不会销毁, 但
是依旧是局部变量, 只对本函数可见.
(3)初始化只执行一次, 默认为0:
静态变量只能初始化一次; 若程序员没有在初始化时设定具体数值时,
系统默认初始化为0. 如static int b; 其
实这一句已经对b进行初始化了, b=0; 具体看下面的例子!
(PS:普通的全局变量有静态属性,因此系统也会默认将其初始化)
eg:
#include <iostream> using namespace std; int fun1() { static int a=5; //这句是初始化,只执行一次 return a--; //这句不是初始化,而是赋值,执行次数无限制 } int fun2() { static int b; //这句是初始化,没手动初始数值则系统会自动初始化为0.只执行一次 b=9; //这句是赋值,执行次数无限制 return b--; } int main() { for(int i=0;i<5;i++) cout<<fun1(); for(int i=0;i<5;i++) cout<<fun2(); //cout<<a; 这句是错的,局部变量加了static依旧是局部变量,但有持久性 // 也就是说,执行完函数后,静态变量的内存不会被释放掉! }
运行结果: 5432199999
/************************************************************************************/
补充个人理解:
(1)
c++的class里面的static变量, 一般看到第一反应就是: 全局变量.
class里面的普通成员只有在创造出对象的时候才会分配内存.
但static的变量则在class建立的时候就分配了静态内存, 而且这个变量在函数外面, 故拥有全局性, 而且能独立于对象而存在.
类的static例子:
#include <iostream> using namespace std; class B{public: static int gg; //非const变量不能在class里面初始化, 必须在类外初始化! }; int B::gg; //在类外初始化, 而Java则是在类内直接初始化. int main() { cout<<B::gg; }
运行结果: 0
(2)
关于static函数与普通函数的区别?(转)
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数
(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该
在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
相关文章推荐
- 关于C/C++中static关键字的作用总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C++中static的作用总结
- C/C++中关键字static作用总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C++回顾之static用法总结、对象的存储,作用域与生存期
- C/C++中static关键字作用总结(转)
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C/C++中static和const关键字的作用总结
- C++中四种对象生存期和作用域以及static用法总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结
- C/C++中static关键字作用总结