何谓标识符?
标识符就是人为起的一个名字。c/c++中,是你用来标识变量名、符号常量名、函数名、数组名、文件名、类名、对象名等...
1.作用。
包括一下四个分类:
a.代码块的作用域(存在于大括号之间)
b.文件的作用域(可以说这个作用域的分类完全是为了彰显全局变量在的作用而设定的,因为全局变量可以贯穿)
c.函数原型的作用域------函数声明的作用
d.函数作用域(用于goto语句使用),标志出现在函数前后都可以使用【所以即使在代码块中,但不属于代码块的作用域】
2.链接类型
a.外部链接类型----对外公开的,要求是全局变量,一般指静态变量
extern int val1; extern void say_hello();
附加:extern的用法:
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。也就是说,定义extern int val后,编译器就会尝试到这个文件关联的文件中(一般使用include进行包含的)进行查询,查询是否有int val这样的变量定义语句。若找到即说明val在另一个文件中已经被定义,此时val就是另一个文件所定义的val。在此文件中修改它的值在另一个文件中也是有效的!
b.内部链接----本文件私有的,静态变量
1 static int var2; 2 static void say_hello();
c.无链接---局部变量,一般指函数内部的变量
3.存储期
a.自动存储期:被存放在栈。在函数内部定义的变量属于自动存储期
b.静态存储期:被存放在数据段中。全局变量属于静态存储期,另外,静态存储期也可以出现在函数内部,但是要在定义的时候加上static(如 static int c = 300;)
c.动态存储期:被存放在堆中。一般动态变量的使用时用到!
1 int * p = malloc(20); //分配,用指针p指向匿名内存 2 free(p); //释放所分配的匿名内存
附加 栈、堆、数据段、代码段的区别:
a.栈(stack)是保存局部变量的,函数结束,其局部变量的生命就结束了(当然是不包括static变量)。即释放了栈的空间(顺便提一下:栈特点为后进先出的!)
b.堆(heap)是操作系统申请的内存空间,需要程序主动申请,主动释放,绝大多数用到的是动态变量的使用!
c.数据段是存取全局变量何静态变量的。
d.代码段是存取代码的。
在Linux中还存在这一个BBS段!
可参考http://blog.csdn.net/jxhui23/article/details/8064766