C语言基础入门48篇_44_静态局部变量、静态全局变量、静态函数(静态局部变量只被初始化一次,保留变量值、静态全局变量是加了作用域的全局变量、静态函数亦是加了作用域的函数)
static关键字
C语言中的static关键字,有多种用法,它可以用来修饰局部变量、全局变量和函数,分别得到静态局部变量、静态全局变量和静态函数。
1. 静态局部变量
普通局部变量,函数每调用一次就会被初始化一次,调用完成后就会被释放,不能被调用,但是静态局部变量在函数被调用过程中会保留,只会被初始化一次。
(1)先看看局部变量的情况下:
void FunTest()
{int nValue = 0;nValue++;printf("nValue:%d\r\n",nValue);
}
int main(int argc, char* argv[])
{FunTest();FunTest();FunTest();FunTest();FunTest();return 0;
}
每一次调用函数,nValue都会被初始化为0,在+1,这也是为什么一直显示为1
(2)静态局部变量
static int nValue = 0;
nValue只有在第一次中才会初始化,保留值进行变化。
(3)静态局部变量的特点:
- 只初始化一次
- 仅在定义的函数内可以使用
(4)优点:
静态局部变量既像全局变量那样,可以在多次函数调用中传递信息,又限制了只能是某一个函数访问,避免了滥用全局变量造成的变量混乱。
2. 静态全局变量
如果使用static修饰全局变量,就得到静态全局变量。在同一个文件中,静态全局变量与全局变量没有区别,均可以被多个函数访问、修改:
#include <stdio.h>static int nValue = 0;void FunTest1()
{nValue++;printf("nValue:%d\r\n", nValue);
}void FunTest2()
{nValue *= 10; //*10printf("nValue:%d\r\n", nValue);
}int main() {FunTest1();FunTest2();return 0;
}
与全局变量不同之处在于,全局变量可以被整个项目共用,静态全局变量只能被当前c文件(.cpp)的函数访问。
静态全局变量可以看作是被限制了作用域的全局变量。
3. 静态函数
在C语言中,函数默认是全局的,在项目中都可以使用,但使用static修饰函数,就得到了静态函数,静态函数只能被当前c文件(.cpp)中的函数调用。
static void myTest(){}
4.学习视频地址:静态局部变量、静态全局变量、静态函数
5. 学习笔记:静态局部变量、静态全局变量、静态函数笔记
C语言基础入门48篇_44_静态局部变量、静态全局变量、静态函数(静态局部变量只被初始化一次,保留变量值、静态全局变量是加了作用域的全局变量、静态函数亦是加了作用域的函数)相关推荐
- C语言基础入门48篇_20_函数入门:为什么使用函数?(函数使得程序模块化 使用函数封装细节,使得程序员只要面向函数的接口编程(参数与返回值),而不用关心函数内部细节)
菜鸟和高手都会基本,那菜鸟为什么是菜鸟,高手为什么是高手呢?很大的区别在于,高手写的程序[结构性]更好,更容易维护.而函数就是C语言结构化的一种手段. 函数可以将大的计算任务划分为多个较小的任务(解耦 ...
- C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)
本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解 1. 第二代身份证号的组成 第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右): AABBCCYYYYMMDDXXXV ...
- C语言基础入门48篇_13_关系运算符与关系表达式(等于(==)、不等于(叹=)、大于(>)、小于(<)、小于等于(<=)、大于等于(>=),5==nValue方式避免bug,==不可比较浮点型数据)
C语言中的关系运算符有等于(==).不等于(!=).大于(>).小于(<).小于等于(<=).大于等于(>=).他们可以直接用于整型.浮点基本数据类型及指针类型变量的比较. 1 ...
- C语言基础入门48篇_18_使用循环移动游戏人物(屏幕符号运动、while(1){}进行实时响应,if(表达式){},switch(表达式){},windows的API及API进行自行封装使)
本篇介绍使用循环语句实现指定符号的坐标移动,使用到了while(1){}进行实时响应,if(表达式){},switch(表达式){},windows中封装的API并对API进行自行封装使用. 1.实现 ...
- C语言基础入门48篇_30_二维数组的定义与使用(二维数组的定义:type 数组名[行][列]、二维数组的初始化、二维数组的引用)
1. 二维数组的定义 type 数组名[行][列] 2. 二维数组的初始化 2.1 全部初始化为0 char chAry[2][3] = { 0 }; 实例: #include <stdio.h ...
- C语言基础入门学习笔记
前言 我是一个初中生,过完暑假就是一个高一的学生了.在这个暑假里,我学习了韦东山老师和唐佐林老师的课程,所以我写下这个笔记来记录自己的成长历程. C语言基础入门学习笔记 格式 #include < ...
- R语言基础入门(全)
R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...
- 【学习笔记】山东大学生物信息学——Perl 语言基础入门+高级
文章目录 8.3 Perl 语言基础入门 8.3.1 第一个 Perl 8.3.2 Perl 的基本规则 8.3.3 字符串常用函数 8.3.4 数组常用函数 8.4 Perl 语言基础高级 8.4. ...
- Lua语言基础入门 (Lua学习一)
Lua语言快速入门 这篇博客主要是简单的讲解一下Lua的基础知识,涉及的东西不是很深,提供一些学习的思路,对具体的技术不展开介绍,网上资料很多写的都比我好,仅仅为了使用Lua,而不是做基于Lua的项目 ...
最新文章
- 解决thinkphp在nginx环境中由于PATH_INFO变量引起的路径问题
- 错误/异常:java.io.FileNotFoundException: .\src\db.properties (系统找不到指定的路径。);的解决方法...
- 一文理解图像处理之HOG特征
- Г函数(伽马函数)、分布
- 手把手教你用python实现决策树的策略规则挖掘
- ASP.NET大闲话:ashx文件有啥用
- python强制跳出while循环_python如何跳出while循环
- 小米oj 组长偏头痛(二分)
- shell脚本之安装ansible(centos7环境)
- 酷派大观4 8970 刷android 4.4,酷派5890驱动 酷派 8970L(大观4)recovery卡刷通用刷机教程...
- 使用MobileTerminal修改越狱后的root密码
- 4G+5G多卡聚合(弱网通信)路由器视频传输最佳选择
- 解决微信小程序点击出现蓝色背景色问题
- 用python计算个人所得税计算器_教你使用Python实现新个税计算器
- [转载]Geronimo renegade: OpenEJB 和 Apache Geronimo 的 EJB 实现
- 阿里云服务器远程又链接不上 链接一下就闪烁一下又回到登陆界面,控制台重启一下才可以连接
- 车载产品Bootloader功能的应用与实现
- 深入CC3200(1)—芯片简介及学习方法
- 【附源码】计算机毕业设计java在线学习系统设计与实现
- seo优化:如何写伪原创文章
热门文章
- Jenkin的安装与启动(war包形式)
- 数学小天才游戏c语言,家长带孩子玩玩这些小游戏 培养数学小天才
- 【闲聊杂谈】深入理解Spring Security设计原理
- WIFI模块ESP8266不停地发送串口消息/不停地自动复位
- ❤️《不知道密码也能登录Linux系统管理员账号!!!》❤️——再也不用担心忘记Linux系统密码了, GRUB启动操作系统教程!(建议收藏)
- cocos 2d-x 环境搭建和创建项目HelloWorld
- 对Bootstrap的css基础样式进行总结归纳
- 李开复公布创新工场计划
- IDEA给springboot项目改名(四个步骤)
- 电子信息技术英语专业词汇基础篇