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 ...
随机推荐
- noip2013 火柴排队
题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...
- Oracle round函数是什么意思?怎么运用?
如何使用 Oracle Round 函数 (四舍五入) 描述 : 传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果. SELECT ROUND( number, [ decimal_p ...
- 安装MySQLdb
MySQLdb模块不太好装,如果是在python2.7环境下,可以使用一种简易安装方式 root@iZ2893wjzgyZ:~# apt-get install python2.7-mysqldb 测 ...
- 怎样使用nat和桥接方式解决虚拟机联网问题
对于很多的linux初学者来说,最开始学习linux时通常是在虚拟机上进行的,然而对于新手来说虚拟机联网会对他们来说是比较困难的.这里我根据自己的经验写了一篇文档分享给大家.下面对几种连接方式进行简单 ...
- 查看Mysql实时执行的Sql语句
最近给客户开发了基于Asp.Net mvc5 +Mysql+EF的项目,但是在EF里无法看到Mysql执行的语句 之前也找到一些监控Mysql的软件但一直没有用起来,现在又遇到了问题即在EF里Mysa ...
- windows live Writer test
package com.newegg.shopping.util.listener; import javax.servlet.http.HttpSessionAttributeListener; i ...
- php正则表达式治疗结巴
用正则表达式去解决结巴这个问题可以通过下面进行解决: 解决思路是: 先找到重复的不部分 用str_replace($source,$replace,$str);来进行代理 下面分两种情况,最后将这两种 ...
- Product of Array Except Self
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...
- ubuntu15.10 或者 16.04 或者 ElementryOS 下使用 Dotnet Core
这里我们不讲安装,缺少libicu52自行安装. 安装完成后使用dotnet restore或者build都会失败,一是报编译的dll不适合当前系统,二是编译到ubuntu16.04文件夹下会产生一些 ...
- 前端见微知著工具篇:Bower组件管控
在上一篇文章中,我们提到了利用Grunt可以完成的内容,其中最主要的功能就是利用各种Node的组件来搭配出一个自动化高亮,自动化运行等的Web前端开发环境.但是Bower也是一个专门来管理各种依赖组件 ...