1.学c笔记归纳 第二篇——基本数据类型2.学c笔记归纳 第三篇——常量
3.学C笔记归纳 第四篇——static关键字(重点)
4.学c笔记归纳 第五篇——指针(抽象点)5.学C笔记归纳 第六篇——结构体6.学C笔记归纳 第七篇——分支循环语句17.学C笔记归纳 第八篇——分支循环语句2_switch8.学C笔记归纳 第九篇——分支循环语句3_for_while_do while(附九九乘法表解析和三种方式实现)9.学C笔记归纳 第十篇——循环算法优化10.学C笔记归纳 第十一篇——函数111.学C笔记归纳 第十二篇——函数2 声明和定义12.学C笔记归纳 第十三篇——函数3 递归(重点)13.学C笔记归纳 第十四篇——一维数组14.学C笔记归纳 第十五篇——二维数组C语言本身内置了关键字,并非自己创建,也不能自己创建。
static的功能:
修饰局部变量 | 转变储存位置,延长局部变量生命周期,也可以保持其值不变 |
修饰全局变量 |
将外部链接属性变为内部连接属性,使作用域变小,其他源文件(.c)就不能再使用这个全局变量了,增加程序安全性 模块内函数外,将其变成本地全局变量 |
修饰函数 |
将外部链接属性变为内部连接属性,使作用域变小 将此函数变为模块的静态函数,模块内其他函数无法调用 |
栈区 | 局部变量... |
堆区 | 动态内存管理 |
静态区 | 静态变量、全局变量... |
局部变量进入作用域创建,出作用域销毁,static修饰局部变量时,局部变量出作用域也不销毁,本质上static修饰局部变量时,改变了变量的存储位置,程序结束时,静态变量才销毁。
存储位置的改变,影响的是变量的生命周期。
#include <stdio.h> int add() { static int a = 1;//改变变量a的存储区域 a++; printf("%d\n", a); return 0; } int main() { int i = 0; while (i < 5) { add(); i++; } add(); return 0; }
先看不用static修饰:
用static修饰变量a:
进入反汇编界面:
可以发现,该静态变量没有对应汇编语句。
那么试试将变量a直接定义为全局变量:
反汇编:
同样没有对应汇编语句。
前面已经说过static修饰局部变量时会改变局部变量的存储位置到静态区,全局变量也存储在这个位置,
那么static修饰局部变量是不是就相当于定义静态全局变量呢? 这个问题还不能下定论,留在此处,标记日后处理。
补充一个关键字extern,调用模块内其他文件定义的全局变量时需声明 ,
编译器工作时是扫描本页面代码,如果不声明此变量,编译器就会报错未定义此变量,所以跨文件调用需声明。
注意:跨文件调用函数不声明不会报错,有时会警告,所以最好声明
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库