当前位置: 首页 > news >正文

C语言-static的作用

2017年第八题第一问:

//2017年 第八题 1
#include <stdio.h>
int fun(){
    int x =1;
    static int y=1;
    x++;
    y++;
    return x+y;
}
main(){
    int a,b;
    a=fun();
    b=fun();
    printf("%d,%d\n",a,b);
}

打印出来的是4,5

因为static修饰的变量y,在第一次调用的时候就初始化,直到方法结束了就释放,第二次调用fun函数的时候,y的变量是2

所以第一次调用的fun 为2+2=4

第二次调用的fun为2+3=5

考点:考核的是static静态变量

第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 
第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。 
第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0; 
(1)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰 
(2)考虑到数据安全性(当程想要使用全局变量的时候应该先考虑使用static)


在C++中static关键字除了具有C中的作用还有在类中的使用 
在类中,static可以用来修饰静态数据成员和静态成员方法 
静态数据成员 
(1)静态数据成员可以实现多个对象之间的数据共享,它是类的所有对象的共享成员,它在内存中只占一份空间,如果改变它的值,则各对象中这个数据成员的值都被改变。 
(2)静态数据成员是在程序开始运行时被分配空间,到程序结束之后才释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间。 
(3)静态数据成员可以被初始化,但是只能在类体外进行初始化,若为对静态数据成员赋初值,则编译器会自动为其初始化为0 
(4)静态数据成员既可以通过对象名引用,也可以通过类名引用。

静态成员函数 
(1)静态成员函数和静态数据成员一样,他们都属于类的静态成员,而不是对象成员。 
(2)非静态成员函数有this指针,而静态成员函数没有this指针。 
(3)静态成员函数主要用来方位静态数据成员而不能访问非静态成员。

 

相关文章:

  • C语言-2019年九1
  • C语言-2019年九题2
  • C语言-2018年第九题1
  • C语言比Java、Python高效
  • C语言-比较字符串是否相等
  • C语言里指针和引用的区别
  • 大数据平台数据集市
  • 认证SQL基础知识
  • Caused by: java.lang.IllegalArgumentException:LoggerFactory is not a Logback LoggerContext but Logba
  • C语言-快速排序
  • JAVA实现-URL短网址生成算法
  • JAVA-字符串连续出现字母进行压缩
  • C语言-字符串连续出现字母进行压缩
  • C语言数组引用
  • c语言中二维数据的存储方式
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Docker入门(二) - Dockerfile
  • Java深入 - 深入理解Java集合
  • python大佬养成计划----difflib模块
  • Vue.js-Day01
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 浮动相关
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端攻城师
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 栈实现走出迷宫(C++)
  • ​卜东波研究员:高观点下的少儿计算思维
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (42)STM32——LCD显示屏实验笔记
  • (Oracle)SQL优化技巧(一):分页查询
  • (TOJ2804)Even? Odd?
  • (windows2012共享文件夹和防火墙设置
  • (二)Linux——Linux常用指令
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)基于IDEA的JAVA基础1
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转) ns2/nam与nam实现相关的文件
  • (转)winform之ListView
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .gitignore文件_Git:.gitignore
  • .NET Core 版本不支持的问题
  • .NET 依赖注入和配置系统
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET连接数据库方式
  • .net中的Queue和Stack
  • @ConditionalOnProperty注解使用说明
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • @vue/cli 3.x+引入jQuery
  • [20160902]rm -rf的惨案.txt
  • [20171101]rman to destination.txt
  • [Angularjs]asp.net mvc+angularjs+web api单页应用