IOS:static和extern的使用
先上代码:
static int var1 = 10;
void staticTest(void);
void countMethod(void);int main() {@autoreleasepool {staticTest();}
}void staticTest(void) {countMethod();countMethod();extern int var1;printf("%d\n",var1);printf("%p\n",&var1);
}void countMethod(void) {static int var1 = 0;var1++;printf("%d\n",var1);printf("%p\n",&var1);
}
输出结果:
1
0x102dce3c0
2
0x102dce3c0
10
0x102dce190
一、extern的作用
extern:引入全局变量,本文件中没有就从整个项目中引入,如果整个程序中都不存在,编译阶段将会报错。
重点:引入的是全局变量,而不是全局区的变量。全局区包括全局变量和静态变量。
例子:
代码中注释掉本段:
//static int var1 = 10;
运行以上代码将会报错:
原因:
extern引入的是全局变量,而不是全局区的局部静态变量。
二、static修饰局部变量
static修饰局部变量的几个功能:
1.改变局部变量的生命周期,将局部变量从栈中存储到全局区,生命周期从函数/代码块执行完成后销毁延长到了:程序的开始到结束
2.不改变局部变量的作用域。
3.不改变数据类型,原来用var修饰,那么值仍然可以改变,原来用const修饰,那么值依然不可改变。
例子:
运行以上代码,前两次打印:
1
0x102dce3c0
2
0x102dce3c0
原因:
var1没有被销毁,存在整个程序的生命周期中。
三、static修饰全局变量
static修饰全局变量的几个功能:
1.不改变声明周期,全局变量的生命周期仍然是整个程序开始到结束;
2.改变了全局变量的作用域,由项目中任意文件都可以使用缩减成了只有在本文件中可以使用;
例子:
运行以上代码,最后一次打印:
10
0x102dce190
原因:
1.证明了两个var1虽然都是存储在全局区,但是却不是同一块内存,也就是说不是同一个变量;
2.extern引入的是全局变量,所以最后会打印10;
IOS:static和extern的使用相关推荐
- c 函数多次声明_【C语言】- static和extern关键字 - 对函数的作用!
不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域.这篇小文介绍2个比较重要的关键字:static和extern. static和extern不仅可以用在变量上,还可以用在函数上.这讲先介绍 ...
- C语言关键字static与extern的详细解释
参考原文地址(static):https://blog.csdn.net/keyeagle/article/details/6708077 参考原文地址(extern):https://www.cnb ...
- C与C++中的extern与static、extern C与__cplusplus的作用
一.概述 以C语言编写的源文件后缀名为.c,以C++语言编写的源文件后缀名为.cpp,C++支持函数的重载,C和C++编译器对函数的编译处理是不完全相同.C++编译后的函数一般是以函数名和形参类型来命 ...
- 【VS开发】static、extern分析总结
引用请注明出处:http://blog.csdn.net/int64ago/article/details/7396325 对于写了很多小程序的人,可能static和extern都用的很少,因为sta ...
- c语言extern_【零基础C语言】- static和extern关键字 - 对变量的作用!
上一篇文章介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问:extern用来定义和声明一个外部函数,允许其他文件访问.static和extern对变量 ...
- C语言中static与extern用法总结
前言-变量的储存方法 在C语言中,供用户使用的储存空间分为3个部分,程序区.静态储存区和动态储存区.其中,程序区存放的是可执行程序的机器指令,静态储存区存放的是在程序运行期间需要占用固定储存单元的变量 ...
- static 和 extern水火不容。
用static声明局部变量,使其变为静态存储方式,作用域不变:用static声明外部变量,其本身就是静态变量,这只会改变其连接方式,使其只在本文件内部有效,而其他文件不可连接或引用该变量. stati ...
- 【c++】c++常见关键词const、static、extern、explicit含义
c++里有几个常见的关键词,比如const.static.extern.explicit,这里就简单介绍下每个关键词的含义以及使用场景. const const相对来说还是比较简单易懂的,就是被修饰的 ...
- c语言中的static和extern,C语言extern与static的用法,及extern “c
C语言extern与static的用法,及extern "c " 一.c语言static与extern的用法 1.static和extern: 大工程下我们会碰到很多源文件. 文件 ...
- 【濡白的C语言】初学者-从零开始-4(欢喜冤家static与extern)
前言 本次主要介绍两个关键字static.extern,主要与函数.变量的作用域与生命周期有关. 目录 extern C语言函数隐式存储方式 全局变量 函数 static 局部变量 全局变量 函数 总 ...
最新文章
- html后缀的网页怎么复制,如何将HTML格式的文本从Chrome浏览器扩展复制到剪贴板上?...
- EPSON机器人_SPEL+语言
- C#-datagriview的表头高度的设置
- 两个独立的窗口和自定义信号
- C++(STL):35---multimap容器
- 宽字符编码和解码通用类[CodeWidthChartUtility]
- scala -abstract 类
- (盒子模型常见问题)外边距合并问题,嵌套盒子边距塌陷问题解决
- 在WCF数据访问中使用缓存提高Winform字段中文显示速度
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_05-freemarker基础-List指令
- 网件6250刷Tomato 系统
- p106矿渣做深度学习踩过的那些坑
- Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist
- 网易云音乐推出异乡人年度企划:不同圈层音乐人演绎他乡故事
- 人工智能软件工程师软件清单
- Express 极速掌握 1
- 计算机word做课程表实验报告,《用word做课程表》教学设计
- 首屏优化,减少白屏时间
- JS之Web API
- oracle更新行,Oracle更新多行