先上代码:

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

原因:
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的使用相关推荐

  1. c 函数多次声明_【C语言】- static和extern关键字 - 对函数的作用!

    不同类型的变量有不同的存储类型.不同的生命周期.不同的作用域.这篇小文介绍2个比较重要的关键字:static和extern. static和extern不仅可以用在变量上,还可以用在函数上.这讲先介绍 ...

  2. C语言关键字static与extern的详细解释

    参考原文地址(static):https://blog.csdn.net/keyeagle/article/details/6708077 参考原文地址(extern):https://www.cnb ...

  3. C与C++中的extern与static、extern C与__cplusplus的作用

    一.概述 以C语言编写的源文件后缀名为.c,以C++语言编写的源文件后缀名为.cpp,C++支持函数的重载,C和C++编译器对函数的编译处理是不完全相同.C++编译后的函数一般是以函数名和形参类型来命 ...

  4. 【VS开发】static、extern分析总结

    引用请注明出处:http://blog.csdn.net/int64ago/article/details/7396325 对于写了很多小程序的人,可能static和extern都用的很少,因为sta ...

  5. c语言extern_【零基础C语言】- static和extern关键字 - 对变量的作用!

    上一篇文章介绍了static和extern对函数的作用,static用来定义一个内部函数,不允许其他文件访问:extern用来定义和声明一个外部函数,允许其他文件访问.static和extern对变量 ...

  6. C语言中static与extern用法总结

    前言-变量的储存方法 在C语言中,供用户使用的储存空间分为3个部分,程序区.静态储存区和动态储存区.其中,程序区存放的是可执行程序的机器指令,静态储存区存放的是在程序运行期间需要占用固定储存单元的变量 ...

  7. static 和 extern水火不容。

    用static声明局部变量,使其变为静态存储方式,作用域不变:用static声明外部变量,其本身就是静态变量,这只会改变其连接方式,使其只在本文件内部有效,而其他文件不可连接或引用该变量. stati ...

  8. 【c++】c++常见关键词const、static、extern、explicit含义

    c++里有几个常见的关键词,比如const.static.extern.explicit,这里就简单介绍下每个关键词的含义以及使用场景. const const相对来说还是比较简单易懂的,就是被修饰的 ...

  9. c语言中的static和extern,C语言extern与static的用法,及extern “c

    C语言extern与static的用法,及extern "c " 一.c语言static与extern的用法 1.static和extern: 大工程下我们会碰到很多源文件. 文件 ...

  10. 【濡白的C语言】初学者-从零开始-4(欢喜冤家static与extern)

    前言 本次主要介绍两个关键字static.extern,主要与函数.变量的作用域与生命周期有关. 目录 extern C语言函数隐式存储方式 全局变量 函数 static 局部变量 全局变量 函数 总 ...

最新文章

  1. html后缀的网页怎么复制,如何将HTML格式的文本从Chrome浏览器扩展复制到剪贴板上?...
  2. EPSON机器人_SPEL+语言
  3. C#-datagriview的表头高度的设置
  4. 两个独立的窗口和自定义信号
  5. C++(STL):35---multimap容器
  6. 宽字符编码和解码通用类[CodeWidthChartUtility]
  7. scala -abstract 类
  8. (盒子模型常见问题)外边距合并问题,嵌套盒子边距塌陷问题解决
  9. 在WCF数据访问中使用缓存提高Winform字段中文显示速度
  10. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_05-freemarker基础-List指令
  11. 网件6250刷Tomato 系统
  12. p106矿渣做深度学习踩过的那些坑
  13. Error: Failed to download metadata for repo ‘appstream‘: Cannot prepare internal mirrorlist
  14. 网易云音乐推出异乡人年度企划:不同圈层音乐人演绎他乡故事
  15. 人工智能软件工程师软件清单
  16. Express 极速掌握 1
  17. 计算机word做课程表实验报告,《用word做课程表》教学设计
  18. 首屏优化,减少白屏时间
  19. JS之Web API
  20. oracle更新行,Oracle更新多行

热门文章

  1. 解决jQuery多个版本,与其他js库冲突方法
  2. JVM监控及诊断工具命令行篇之jstack
  3. RabbitMQ死信队列和备份交换器总结
  4. Docker入门之安装MySQL
  5. 《Linux 系列》- 常用命令- 文件浏览命令]
  6. centos7 安装 卸载docker
  7. Selector.wakeup实现注记
  8. AngularJS开发指南10:AngularJS依赖注入的详解
  9. Java Class对象
  10. mac Lion 10.7系统使用笔记