C语言static关键字
来源:互联网 发布:神奇宝贝坂木老大知乎 编辑:程序博客网 时间:2024/05/19 17:27
学习C语言,变量的存储类型是一个比较容易混乱的地方,特意写下这篇博客来记录下。
static对于变量的影响:
C语言变量:
按照作用范围(scope)来分:
1、全局变量
2、局部变量
全局变量又可以分为:静态全局变量和全局变量。
当我们在函数外面声明变量时,得到的这个变量就是全局变量,他的作用域是在程序的整个生命周期都存在,即他的默认声明方式是采用了 extern关键字。
如果不想让这个声明的全局变量被其他的文件使用,可以对其加上static关键字,表示限定了这个全局变量的作用域为该文件,在这个文件之外它是不可见得。
局部变量也可以分成静态局部变量和局部变量。
所有在函数内部声明的变量都是局部变量,局部变量默认的存储类别是auto即动态的自动的。所以局部变量默认是存储在栈中的,作用域为函数内部,当函数的
生命周期结束局部变量就会被系统自动释放掉,局部变量是在函数调用时系统动态分配栈中的内存来存储,在函数执行完毕时由系统自动回收释放,所以他的默认关
键字是auto。但是静态局部变量是一个例外,当使用static关键字来修饰局部变量时,该局部变量是在编译时由系统在全局区域(静态存储区)分配内存,并且会由系统
自动初始化,这里和全局部变量有点像。静态局部变量的生命周期是整个程序的生命周期,但是他的作用域是只在函数中有效地,静态局部变量由于它的存储位置的特殊,
所以不会在函数执行完以后由系统自动的释放,也不会在函数调用的时候由系统动态的分配内存空间,所以它里面存储的值会随着函数调用而一直变化。
全局变量无论是extern全局变量还是static全局变量,都是存储在内存的全局区域(静态存储区),而动态局部变量是存储在栈里的,静态局部变量也是存储在全局区域。
存储在全局区域的变量有一个特点就是如果在定义该变量时没有对其进行初始化,系统在编译时会对其进行初始化。而且他们的内存分配都是静态的,即在编译时分配内存。
static对于函数的影响:
加上static关键字修饰的函数表明,这个函数只能在他被定义的文件里调用,不能在其他文件里调用。C语言定义函数时其实是指定了其作用域的,默认的是extern关键字,
只不过被隐藏了,当使用static关键字定义函数时,就等于限定他的作用范围,只能在这个文件中调用,隐藏于模块中了。
- c语言关键字static
- c语言static关键字
- C语言关键字static
- C语言static关键字
- 关键字static(c语言)
- C语言-关键字static
- c语言关键字--static
- C语言 static 关键字
- C语言static关键字
- C语言 Static关键字
- c语言关键字static
- C语言关键字Static
- C语言 static关键字
- c语言static关键字
- C语言 static关键字解析
- C语言static关键字解析
- C语言中static关键字
- C语言static 关键字浅析!
- 基于Android 4.2.2的Account Manager源代码分析学习:设备上帐号类型列表的获取
- 属性表的创建及记录的添加
- leetcode 137 —— Single Number II
- LeetCode解题报告--Longest Common Prefix
- hdu5115 Dire Wolf(区间dp)
- C语言static关键字
- MySQL查看和修改wait_timeout
- CentOS更改yum源与更新系统
- servletFileUpload.parseRequest(request)解析为空获取不到数据问题
- 如何构建一个高效的敏捷团队
- java与mysql乱码的问题
- H - Sum---(2015 summer training #12(Team_Qualifying))
- Java I/O
- 数据结构实验之求二叉树后序遍历和层次遍历