const、static、extern三个关键字
默认情况下,C语言的全局变量是全世界都可以访问的,也就是全局变量可以跨文件访问。
extern可以引用全局变量
例如,如果有一个全局变量int money = 100;
extern int money 意为:引用这个全局变量,而非定义一个全局变量
注意:不允许出现两个变量名一样的全局变量
函数和变量一样,都可以被全局引用
static的作用:
static 修饰的全局变量作用域仅限于当前文件 所以被static修饰的全局变量不能被引用
static修饰的局部变量只会初始化一次,在整个程序运行过程中始终存在
const : const只修饰它右边的内容,被const修饰的内容都是常量、都是不能再修改的
int * const p1; p1是常量 *p1是变量
int const * p1; *p1是常量 p1是变量
const int *p1;
const int *const p1; p1和 *p1都是常量
int const * const p1;
const int age = 20;
int *p = &age;
*p = 30; 不行
static :
1> 被static修饰的全局变量\常量
1) 仅限于当前文件访问
2) 改变了作用域
2> 被static修饰的局部变量
1) 只会占用一块内存,在整个程序运行过程都不会销毁,只会初始化一次
2) 改变了生命周期,并没有改变作用域
extern : 可以引用一个全局变量\常量
默认全局变量如果没有用static修饰,全部是可被extern的(即全局可访问,但可被访问到的前提是:在其他地方访问这个全局变量必须要加extern修饰符,笔者称之为可被extern)
比如:我在A.m文件中声明并定义了一个全局变量BOOL isSelected = NO;如下图:

我如果在B.m文件中声明同名的变量BOOL isSelected = NO;会报错,截图如下:

解决这个问题的办法有两种:
第一种:A.m文件中的全局变量声明为static的,代表只能在当前文件访问(当前文件可见):static BOOL isSelected = NO;
第二种:B.m文件中用extern引用A.m文件中申明定义的这个全局变量:引用方式:extern BOOL isSelected;如下图:

采用第二种方式:代表B.m文件和A.m文件使用的是同一个BOOL类型的变量!!!如果A.m文件把isSelected 改为YES,那么B.m文件使用这个isSelected时需要注意了,此时isSelected也是YES!!!
注意:
1. 上面extern BOOL isSelected;这句代码不是声明变量,而是引用变量。
2. 一般情况下,如果其他文件中不会访问本文件中的全局变量,那么建议用static关键字进行修饰,例如:static BOOL isSelected = NO;
const、static、extern三个关键字的更多相关文章
- const,static,extern 简介
const,static,extern 简介 一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 执行时刻:宏是预编 ...
- 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)
李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...
- iOS 中 const static extern 关键字总结
在看一些高手所写的代码时,总是可以看到我们小白平常不用的关键字,一次,两次,三次,不能总是不明不白,现在总结一下日常开发中常用的关键字的作用: 关键字const/static/extern的释义和用法 ...
- const,static,extern简介
一.const与宏的区别: const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译阶段. 编 ...
- const,static,extern简介(重要)
一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽成宏,推荐我们使用const常量. 编译时刻:宏是预编译(编译之前处理),const是编译 ...
- iOS正确使用const,static,extern
static 修饰局部变量 让局部变量只初始化一次 局部变量在程序中只有一份内存 并不会改变局部变量的作用域,仅仅是改变了局部变量的生命周期(只到程序结束,这个局部变量才会销毁) 修饰全局变量 全局变 ...
- const,static,extern,#define
一.const // 简单定义变量,可以修改变量的值 ; a = ; // const的用法 // 用法一: ; ; // 不允许修改,因为 const 修饰 b/c,指定 b/c 为常量!! // ...
- const ;static;extern的使用与作用
const /** const :常量 const ...
- const static extern
http://wenku.baidu.com/link?url=saMJ3WpR_Lili2oflaIK-xK7wkQhtP2I-FdEX6I_XjmNxl7m0Z8SYHJtfqyXYkSmok8h ...
随机推荐
- 关于js预编译以及js文件执行顺序的几个问题。
关于js的执行原理,除去html页面中直接添加的代码,js代码的放置可以分为两类. //情形a <script type="text/javascript" ...
- ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现
from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...
- 一行命令搞定node.js 版本升级
from:http://www.16boke.com/article/detail/26 今天,又发现一个超级简单的升级node.js的方法.一行命令搞定,省去了重新编译安装的过程. node有一个模 ...
- JS给文本框赋值后,在页面后台取不到文本框值的解决方法
转自:http://www.cnblogs.com/qiaohd/archive/2012/03/23/2413660.html (ReadOnly.disabled 都有可能造成取值取不到) 开发一 ...
- MVC控制器总结
1.特性 [AuthorizeFilter] 用于权限过滤 [HttpGet] [HttpPost] 2.参数 获取方法 public ActionResult void Get(int id){} ...
- 【转】CSS样式覆盖规则
大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义.其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值, ...
- Jump Game 的三种思路 - leetcode 55. Jump Game
Jump Game 是一道有意思的题目.题意很简单,给你一个数组,数组的每个元素表示你能前进的最大步数,最开始时你在第一个元素所在的位置,之后你可以前进,问能不能到达最后一个元素位置. 比如: A = ...
- 创业这三年¥.NET之尴尬处境
创业这三年#迈出第一步 创业这三年@各种奇遇 之前写的文章有兴趣的大家可以看看. 本来没有打算写这样一篇会遭人拍砖的文章,但是发现大家每天忙于编码,对市场环境..Net生态没有一个真实.多角度的认识, ...
- .Net分布式异常报警系统-服务端Service
服务端的2个Service 1. HandleService: 从Redis中获取异常信息, 入库并发送通知到相关责任人. 2. HealthyCheckService: 对站点指定页面进行模拟访问 ...
- Android手机截屏
刚开始打算做一个简单的截屏程序时,以为很轻松就能搞定. 在Activity上放一个按钮,点击完成截屏操作,并将数据以图片形式保存在手机中. 动手之前,自然是看书和网上各种查资料.结果发现了解的知识越多 ...