有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值。这时就应该指定该局部变量为静态局部变量(static local variable)。

例 静态局部变量的值。
#include <iostream>
using namespace std;
int f(int a)                          //定义f函数,a为形参
{auto int b=0;                      //定义b为自动变量
static int c=3;                     //定义c为静态局部变量
b=b+1;
c=c+1;
return a+b+c;
}

int main( )
{int a=2,i;
for(i=0;i<3;i++)
    cout<<f(a)<<″ ″;
cout<<endl;
return 0;
}

运行结果为
7 8 9
先后3次调用f函数时,b和c的值如下表所示。


对静态局部变量的说明:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。

(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。

静态局部变量(static)用法相关推荐

  1. static局部变量(静态局部变量的用法)

    有时希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的储存单元不释放,在下一次调用此函数时,该变量已经有值(就是上一次函数调用结束时的值).这时就应该指定该局部变量为" ...

  2. C语言基础入门48篇_44_静态局部变量、静态全局变量、静态函数(静态局部变量只被初始化一次,保留变量值、静态全局变量是加了作用域的全局变量、静态函数亦是加了作用域的函数)

    static关键字 C语言中的static关键字,有多种用法,它可以用来修饰局部变量.全局变量和函数,分别得到静态局部变量.静态全局变量和静态函数. 1. 静态局部变量 普通局部变量,函数每调用一次就 ...

  3. C++ 笔记(06)— 变量作用域(局部变量、全局变量、静态局部变量)

    作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量: 在函数参数的定义中声明的变量,称为形式参数: 在所有函数外部声明的变量,称为全局变量: 1. ...

  4. c 全局变量多线程调用_c语言局部变量 静态局部变量 全局变量与静态全局变量...

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  5. C语言局部变量、全局变量、静态局部变量、静态全局变量

    建立三个文件,文件名分别为main.c \ head1.c \  head2.c main.c #include<stdio.h> #include<stdlib.h> #in ...

  6. 【C语言局部变量/静态局部变量/全局变量与静态全局变量

    1基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  7. c语言局部变量 静态局部变量 全局变量与静态全局变量

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  8. c语言中全局变量多线程调用-局部变量、静态局部变量、全局变量与静态全局变量分析

    基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...

  9. 静态全局变量 静态局部变量

    全局变量的作用域是整个项目,它只需要在一个源文件中定义就可以作用于所有的源文件,其它不包括全局变量定义的文件需要用extern关键字再次声明这个全局变量. 全局变量.静态全局变量.静态局部变量都是在静 ...

最新文章

  1. 2017年ICPC西安邀请赛A、XOR(线段树套线性基 + 思维)
  2. “cannot resolve symbol R” in Android Studio
  3. 使用commandfield删除、修改gridview
  4. Java核心技术点之多线程2
  5. [SharePoint]ExcelService未响应或拒绝访问
  6. BUUCTF crackMe
  7. 计算机专业英语公开课教案,小学英语公开课教案,小学英语优质课教案?
  8. C/C++串口通信原理及读写与操作
  9. 前端学习(2708):重读vue电商网站28之通过axios请求拦截器添加 token
  10. 华为Mate8刷低Android版本,华为mate8怎么刷机 华为mate8刷机方法【图文教程】
  11. 设备树语法和多任务处理
  12. 【转】TranslateAnimation详解
  13. 福利网站!程序员面试——算法工程师面试大全第一部分
  14. 旋转区域_高空旋转雾化机雾桩应用场所、高压喷雾立杆式降尘设备,高压微雾除尘系统原理以及优势...
  15. Oracle使用手册(二)---流程控制
  16. deepfake 资源总结
  17. 买什么手提电脑好_玉米种子买什么品种好?
  18. 单片机技术及应用:基于proteus仿真的c语言程序设计,《单片机的C语言程序设计与应用——基于Proteus仿真(第3版)》怎么样_目录_pdf在线阅读 - 课课家教育...
  19. etc门架系统服务器是什么,ETC门架是什么东西?ETC龙门架作用
  20. IFB上挂载NETEM

热门文章

  1. Hadoop2.6.0+Linux Centos7+idea环境下:MapReduce二度好友推荐案例
  2. 新手报道,请多关照!
  3. 2011浪漫婚礼主持词 最全的婚礼司仪主持词
  4. PHP SESSION PHPSESSID session_id()
  5. 团队工具推荐(产品研发篇)
  6. 2022年重庆大学计算机科学与技术考研复试分数线
  7. netdata mysql_netdata使用
  8. POI - 读取Excel2003、Excel2007或更高级的兼容性问题
  9. 电脑开启wifi功能
  10. mysql取消权限设置_mysql用户授权与权限撤销