五分钟明白static和const关键字

static关键字

类型名称作用域生命周期默认初始值
全局变量当前文件和其他文件(extern)整个程序0
局部变量当前函数整个定义的函数乱数
static 全局变量当前文件(其他文件extern也不可以)整个程序0
static 局部变量当前函数整个程序0
static 函数当前文件(其他文件不可调用)整个程序 

!:

1)总结起来说,static关键字主要用于三个方面(局部变量,全局变量,函数),每个方面的影响主要是两个地方(作用域,生命周期)

①修饰局部变量:普通局部变量的作用域是定义它的当前函数内,声明周期是定义它的整个函数,经过static关键字修饰,对他的作用域没有影响,但是会扩大他的生命周期,变为整个程序。

②修饰全局变量:普通全局变量的作用域是当前文件和其他文件(使用extern声明),声明周期是整个程序,经过static关键字修饰,对他的生命周期没有影响,但是作用域变为当前文件,即成了本文件的私有全局变量,其它文件不可使用,但是可以定义同名变量。

③修饰函数:普通函数的作用域是当前文件和其他文件(不用extern也可以),生命周期是整个程序,经过static关键字修饰,对他的生命周期没有影响,但是作用域变为当前文件,即成了本文件的私有函数,其他文件不可使用,但是可以定义同名函数。

2)默认情况下全局变量和函数的链接属性是external型(对所有文件都有效)的,不论声明多少次,位于几个文件,都是同一个实体。因为函数默认是被extern修饰的,所以使用函数时不需要使用extern关键字声明,但是使用全局变量需要使用extern声明。

3)实质上讲,static改变的是函数和全局变量的链接属性,由external变为internal。

4)因为static修饰的局部变量的生命周期是被定义到程序结束,也就是说,在被定以后,它会一致存在,所以静态局部变量的初始化语句只会在第一次定义时执行一次。

const关键字

1.不涉及指针使用的const关键字,写在哪里效果都是一样的

int const a=1;
const int a=1;

2.

int b=10;
[1] const int* a=&b;
[2] int const* a=&b;
[3] int *const a=&;
[4] const int * const a=&b;

[1],[2]两种写法意义相同,const都是修饰指针所指向的内容,即所指向的内容为常量,不能" *a = 3"。

[3]写法,const修饰的指针本身,即指针本身是一个常量,不能"a++"这样的操作,a不能改变

[4]写法,const修饰的是指针本身和指针所指向的内容,即两者均是常量,都不能改变

注:如何判断const修饰的事物,可以根据const 和 * 的位置,const在前即修饰 "*a",即*a是常量,就是所指向的东西是常量,const在后,即修饰的a本身,a原本是个指针变量,所以a被const修饰以后,a就成了常量,所以a不能变。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值