0
点赞
收藏
分享

微信扫一扫

C语言总结—变量、static、const


 —————————————————————— 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]指针本身和指向的内容均为常量,都不能改变



举报

相关推荐

0 条评论