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

关键字:static

1.铺垫

1.1全局变量可以跨文件访问吗?答:可以;

1.2函数可以跨文件访问吗?答:可以

1.3在具体的应用场景中,程序员不想让全局变量或者函数跨文件访问,只在本文件内部被访问?答:可以——引出static关键字

2.static

2.1static修饰全局变量,该变量只能在本文件内被访问,不能被外部其他文件直接访问;但是可以被间接访问——通过访问非static修饰的函数,访问static修饰的全局变量

2.2static修饰函数,该函数只能在本文件内被访问,不能被外部其他文件直接访问;但是可以被间接访问——通过访问非static修饰的函数,访问static修饰的函数

解释:static修饰全局变量或函数,限制了作用域,本来是个文件都可以访问,修饰之后,只能在本文件中被访问

2.3static修饰局部变量,更改局部变量的生命周期,作用域不变,临时变量->全局生命周期

但是可以通过全局变量指针,来获取局部变量的地址,从而访问变量

扩展:进程地址空间的知识

static修饰局部变量,将局部变量从栈区定义,变成了已初始化全局数据区定义,延长了生命周期;

举例:

#include<stdio.h>
void fun() {
    static int a = 0;
}
int main(){

    func();
    printf("a=%d\n", a);
    return 0;
}

//此程序会报错:未定义标识符a;a的作用域依旧是func()代码块;但生命周期为全局生命周期

//func()函数跑完之后,空间会被回收,可是a依旧被保存在内存中;

int *p=NULL;

void fun() {
    static int a = 0;

    p=&a;
}
int main(){

    printf("a=%d\n", *p);        //可以如此将a拿出来
    return 0;
}


http://www.mrgr.cn/news/43290.html

相关文章:

  • 【RISCV指令集手册】向量扩展v1.0
  • 视频剪辑软件哪个好?四大视频剪辑软件揭秘
  • 瓶颈ing
  • MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
  • 什么是编译型语言,什么是解释性语言?java属于哪种?
  • 第3篇:Linux权限维持----应急响应之权限维持篇
  • 我的创作纪念日一年
  • qt 使用svg 图标的使用
  • 二叉树深度学习——将二叉搜索树转化为排序的双向链表
  • TypeScript面向对象 02
  • 特别节目————集训总结
  • AQS原理(AbstractQueuedSynchronizer)
  • 若依使用(二次开发)
  • 152. 乘积最大子数组
  • 国外电商系统开发-运维系统添加拓扑节点
  • 知识图谱入门——10:使用 spaCy 进行命名实体识别(NER)的进阶应用:基于词袋的实体识别与知识抽取
  • (Linux驱动学习 - 6).Linux中断
  • 【ECMAScript 从入门到进阶教程】第二部分:中级概念(面向对象编程,异步编程,模块化,try/catch 语句)
  • visual studio使用ssh连接linux虚拟机运行程序
  • 【OAuth 2.0】使用与更新