static、局部变量、全局变量
title : static、局部变量、全局变量
category : IOS
static、局部变量、全局变量
标签(空格分隔): IOS
[TOC]
局部变量
定义
【static、局部变量、全局变量】在函数内部或复合语句内部定义的变量称为局部变量
定义变量可能有3中情况
- 在函数的开头定义
- 在函数内的复合语句内定义
- 在函数外部定义
- 在一个函数内部定义的变量只在本函数范围内有效,在此函数以外是不能使用这个变量的
- 在复合语句内定义的变量只在本复合语句内有效,在该复合语句以外是不能使用这个变量的
存储方式 动态存储方式和静态存储方式
生命周期 自动变量(auto变量)
- 函数中的局部变量,如果不专门声明为static(静态)存储类别,都是动态地分配存储空间,数据存储在动态存储区。
- 在调用函数时,系统会给这些变量分配存储空间,在函数调用结束时就会自动释放这些存储空间
- 有时希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用的时候该变量已经有值。这时就应该指定该局部变量为
静态局部变量
,用关键字static进行声明。 - 静载局部变量属于静态存储类别。在程序整个运行期间都不释放。(而动态局部变量auto变量函数调用结束后即释放)
- 对静态局部变量是编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而是保留上次函数调用结束时的值。而对于自动变量赋初值,不是在编译时进行的,而是在函数调用时进行的,每调用一次函数重新给一次初值。
- 如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或'\0'(对字符变量)。而对自动变量来说,它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的内容是不可知的
- 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。因为他是局部变量,只能被本函数引用,而不能被其他函数引用。
如果一些变量使用频繁,则存取变量的值要花费不少时间。为提高执行效率,允许将局部变量的值存放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫
寄存器变量
用关键字register
声明全局变量 定义
在函数之外定义的变量称为
外部变量
也叫全局变量
作用范围
全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束
全局变量的存储类别
在一个文件内扩展外部变量的作用于 用extern对该变量做
外部变量声明
在外部变量的作用域扩展到其他文件 将外部变量的作用域限制在本文件中 有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个
static
声明用static声明一个变量的作用是
- 1 对局部变量用
static
声明,把它分配在静态存储区,该变量在整个程序执行期间不释放,其所分配的空间始终存在 - 对全局变量用
static
声明,则该变量的作用域只限于本文件模块(即被声明的文件中)
推荐阅读
- 南美白对虾肝胰腺的形态结构、发育过程和病变过程
- 【黄啊码】MySQL入门—3、我用select|【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票
- 1
- 股市|7月22日新股速递
- 政策|村镇银行、保交楼、影子银行…银保监会回应热点问题
- 投稿|灿谷好车、卖好车们发力数字化:汽车B2B还是不是一门好生意?
- 投稿|TikTok、网易入局,互动小说再进化
- Ionicons|Ionicons - Ionic 出品的免费开源、高性能图标库,适用于 web / APP / 桌面应用
- 【连载】夜游梦话|【连载】夜游梦话 十六、广场上的枪声
- 投稿|土味青年、网络杀马特与东北往事