static和extern对变量和函数的作用
来源:互联网 发布:矩阵理论教材推荐 编辑:程序博客网 时间:2024/05/29 17:19
一.变量的作用域
根据变量的作用域,可以分为局部变量和全局变量
1.局部变量:
(1)定义:在函数(代码块)内部定义的变量(包括函数的形参:函数形参作用域是函数开始到结束)
(2)作用域:从定义变量的那一行开始,一直到代码块结束
(3)生命周期:从定义变量的那一行开始分配存储空间,代码块结束后,就会被回收
(4) 没有固定的初始值
2.全局变量
(1)定义:在函数外面定义的变量
(2)作用域:从定义变量的那一行开始,一直到源程序结束(能被后面的所有函数共享)
(3)生命周期:程序一启动就会分配存储空间,程序退出时才会被销毁
(4)默认的初始值就是0
二.static和extern对全局变量的作用
1.全局变量分2种:
(1)外部变量:定义的变量能被本文件和其他文件访问
<1>默认情况下,所有的全局变量都是外部变量
<2>不同文件中的同名外部变量,都代表着同一个变量
(2)内部变量:定义的变量只能被本文件访问,不能被其他文件访问,不同文件中的同名内部变量,互不影响
2.在C语言中,全局变量定义的位置是有限制的,在默认情况下,一个函数不可以访问在它后面定义的全局变量
解决办法:
<1>将变量定义在函数的前面
<2>在函数前面对变量进行声明(全局变量声明在前面加上extern,例如:extern int a 。后面还需要继续定义)
3.重复定义同一个全局变量
全局变量的定义可以无数遍的写(也适合在多文件中),编译器是不会报错,因为写的那么多遍,其实都是同一个变量而已。
4.static关键字
但很多时候,我们并不想让源文件中的全局变量跟其他源文件共享,相当于私有的全局变量,那么你就得用static关
键字来定义变量,这样这个全局变量只能在本文件中访问。
5.static和extern的总结
(1)extern可以用来声明一个全局变量,但是不能用来定义变量
(2)默认情况下,一个全局变量是可以供多个源文件共享的,也就说,多个源文件中同名的全局变量都代表着同一个变量
(3)如果在定义全局变量的时候加上static关键字,此时static的作用在于限制该全局变量的作用域,只能在定义该全
局变量的文件中才能使用,跟其他源文件中的同名变量互不干扰。
三.变量的存储类型
变量存储类型是指变量存储在什么地方,有3个地方可以用于存储变量:普通内存,运行时堆栈,硬件寄存器。变量的
存储类型决定了变量何时创建,何时销毁以及它的值能存储多久,也就决定了变量的生命周期。
C语言中根据变量的存储类型的不同,可以把变量分为:自动变量,静态变量,寄存器变量
1.自动变量
(1)定义:自动变量是存储在堆栈中
(2)自动变量:被关键词auto修饰的局部变量都是自动变量,没人使用这个关键字,因为所以的局部变量在默认情况下
都是自动变量。
(3)生命周期:在程序执行到声明自动变量的代码块(函数)时,自动变量才被创建;当自己变量所在的代码块(函数)执
行完毕后,这些自动变量就会自行销毁。如果这个函数被重复调用,这些自动变量每次都会重新创建。
2.静态变量
(1)定义:静态变量是存储在静态内存中的,也就不属于堆栈。
(2)那些是静态变量:
<1>所以的全局变量都是静态变量
<2>被关键词static修饰的局部变量也是静态变量(作用域还是局部变量的作用域)
(3)声明周期:静态变量在程序运行之前创建,在程序的整个运行期间始终存在,直到程序结束
3.寄存器变量
(1)定义:存储在硬件寄存器中得变量叫寄存器变量。寄存器变量比存储在内存中的变量访问效率更高(默认情况下,
自动变量和静态变量都是放在内存中的)
(2)哪些变量是寄存器变量:
<1>被关键词register修饰的自动变量都是寄存器变量
<2>只有自动变量才可以是寄存器变量,全局变量和静态局部变量不可能是。
<3>寄存器变量只限于int,char,和指针类型变量使用。
(3)生命周期:因为寄存器变量本身就是自动变量,所以函数中的寄存器变量在调用该函数时占用寄存器中存放的值,当函数结束时释放寄存器,变量消失。
(4)使用注意:
<1>由于计算机中寄存器数目有限,不能使用太多的寄存器变量。如果寄存器使用饱和时,程序将寄存器变量自动转换为自动变量处理
<2>为了提高运算速度,一般会将一些频繁使用的自动变量定义为寄存器变量,这样程序尽可能地为它分配寄存器存放,而不是用内存
四.static和extern对函数的作用
1.外部函数:如果在当前文件中定义的函数允许其他文件访问、调用,就称为外部函数,默认情况下所有函数都是外部
函数。C语言规定,不允许有同名的外部函数。
2.内部函数:如果在当前文件中定义的函数不允许其他文件访问、调用,只能在内部使用,就称为内部函数。C语言规
定不同的源文件可以有同名的内部函数,并且互不干扰
3.extern关键字对函数的作用:用来完整地定义和声明一个外部函数,默认就是extern,完全可以省略。
4.static关键字对函数的作用:用来定义和声明一个内部函数
5.总结:
(1)static
<1>在定义函数时,在函数的最左边加上static可以把该函数声明为内部函数(又叫静态函数),这样该函数就只能
在其定义所在的文件中使用。如果在不同的文件中有同名的内部函数,则互不干扰。
<2>static也可以用来声明一个内部函数:函数写在后面,先在前面声明一下
(2)extern
<1>在定义函数时,如果在函数的最左边加上关键字extern,则表示此函数是外部函数,可供其他文件调用。C语言
规定,如果在定义函数时省略extern,则隐含为外部函数。
<2>在一个文件中要调用其他文件中的外部函数,则需要在当前文件中用extern声明该外部函数,然后就可以使
用,这里的extern也可以省略。
五.总结
1.static对变量的作用:定义一个内部变量
2.extern对变量的作用:声明一个外部变量
3.static对函数的作用:定义和声明一个内部函数
4.extern对函数的作用:定义和声明一个外部函数(可以省略)
- static和extern对变量和函数的作用
- extern 和 static 对变量的作用
- static和extern对函数的作用
- IOS开发---C语言-㉓static和extern对函数和变量的作用
- C语言 static和extern关键字 对变量的作用
- C语言 static和extern关键字 对变量的作用
- c语言基础4—static、extern对函数和变量的作用
- C语言 static和extern关键字 对函数的作用
- C语言 static和extern关键字 对函数的作用
- 黑马程序员IOS基础---C语言学习之static和extern关键字对函数以及变量的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- C 语言-static和extern关键字2-对变量的作用
- 【C语言】20-static和extern关键字2-对变量的作用
- 【C语言】19-static和extern关键字1-对函数的作用
- 【C语言】19-static和extern关键字1-对函数的作用
- c#第二次作业--随机图片(目标三)
- android sqlite 操作:rawQuery and execSQL
- 深入学习Memcached
- 法向量工具类
- hdu 5093 Battle ships(二分匹配)
- static和extern对变量和函数的作用
- LeetCode (16) Valid Palindrome (回文)
- 直方图常用函数简介(C++)
- MTK Android Driver知识大全
- zoj 2975 Kinds of Fuwas(超时题)
- Oracle数据库学习笔记四——存储过程的值传递和引用传递
- 数据库上机作业4
- 括号匹配(二) 区间DP
- iOS截图