Chinaunix首页 | 论坛 | 博客
  • 博客访问: 183131
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 622
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 19:12
文章分类

全部博文(67)

分类: C/C++

2014-11-19 19:31:32

1、auto
作用域和存储空间自动,比如放在函数内的变量自动为local,放在栈区,执行到其定义时分配内存,函数结束释放内存;结构体、类的成员变量自动为该结构体、类的局部变量,生存期(除static外)同其对象;放在所有函数、结构、类、联合等体外的自动为全局变量,程序运行之初已分配内存,放在全局数据区,程序结束时释放。因为所有变量默认为auto,所以不写。
2、extern
可用于变量和函数,用来声明其具有外部链接属性,即此处仅为声明,定义在别处。函数的可省略,变量的不能省。
为了遵循一处定义,到处声明的原则,如果使用extern的同时进行定义的话,比如 extern int i = 1;则extern被编译器忽略。
另外可用于extern "C",即在c++中使用c函数,因为二者编译后的函数名不同(c++由于多态性函数名很复杂)
3、static
无论变量定义在何处,都存储到全局数据区,程序运行期有效,但作用域不同。
用在函数内变量,局限在函数内,运行该函数时访问之
用于非成员函数,限定其作用域在本文件中
用在类成员函数和成员变量,局限在类内,可通过类名直接访问,也可通过类的对象访问。但static成员函数只能访问static成员变量或调用其他static成员函数,因为static成员函数没有this。
用在所有函数及类、结构体、联合等之外的变量,局限在文件内,其他文件内可定义同名变量无冲突。
4、const
限制变量不可修改。默认为static,可用extern修饰,使其可在别处使用。
定义时需要初始化,因为之后不能再赋值。用于类的成员变量时需要在member initialize list中初始化,因为constructor中各成员变量都已经完成初始化了。
const int *p;*p为const不可修改,但p可修改
int * const p;p为const不可修改,但*p可修改
const int * const p;二者都不可修改
extern和static修饰的变量都放在全局数据区,但extern可以在所有文件内访问,只要用extern声明即可,而static只有局部作用域。二者不可修饰同一变量。
阅读(1129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~