—————————————————————— static总结 ——————————————————————
类型名称 作用域 生命周期 默认初始值
全局变量 当前文件和其他文件(extern) 整个程序 0
局部变量 当前函数 整个定义的函数 乱数
static全局变量 当前文件(其他文件extern也不可以) 整个程序 0
static局部变量 当前函数 整个程序 0
static函数 当前文件(其他文件不可调用) 整个程序
1)默认状态下全局变量的链接属性是external型(对所有文件都有效)的,不论声明多少次,位于几个文件,都 表示同一个实体,如果其他文件想要使用这个全局变量,需要使用extern关键字
2)static修饰的全局变量会让它的链接属性变为internal型的,就成为了这个文件的私有文件,其他文件不能使 用,但是其他文件可以声明一个相同名字的变量
3)static修饰函数,他就变成了这个文件的私有函数,其他文件不可以调用,但是可以定义相同名字的函数,。
4)普通函数本身就是external型的,并且默认声明和定义都是被ertern修饰,所以其他文件可以调用
5)static改变函数和全局变量的作用域,不改变生命周期,改变局部变量的生命周期,作用域不变
若a.c中需要引用b.c中的变量int v,可以在a.c中声明extern int v,然后就可以引用变量v;需要注意的是,被引 用的变量V的链接属性必须是外链接(external),也就是说a.c要引用v,不知取决于在a.c中声明,还取决于v本身 的属性
—————————————————————— const总结 ——————————————————————
1.const不涉及指针的const 写在哪里都代表一个常数
2.
int b=500;
const int* a=&b; [1]
int const *a=&b; [2]
int* const a=&b; [3]
const int* const=&b; [4]
[1],[2]的意义相同,都是指针所指向的内容为常量(const放在变量声明符的位置无关),不能* a=3,const修饰的 * a,所以*a不能改变 [3]指针本身是个常量,指针指向的内容不是常量,可以改变,a=a+1是错的,const修饰的a,所以a不能变 [4]指针本身和指向的内容均为常量,都不能改变