📝 简单的理解方式: 普通变量:写字板,用完就擦 static变量:笔记本,翻开还在 这波类比我直接吹爆!🎉 🤔 为什么要用static? 需要累加计数时 想保存函数上次的状态 不想重复初始化某个值 程序员们:这也太好用了吧! 📌 划重点: 记住static变量只初始化一次 但能被多次修改 这就是它的独特之处~0 0 发...
可以,static在C语言中是表示一个变量为静态变量的,而不是常量,也不是不可变的变量。所谓的静态变量有两种情况,一种是静态全局变量,一种是静态局部变量。像在VB,C#,C,C++,Java,PHP,Objective-C,JavaScript中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN、ALGOL、COB...
首先static变量不是全局变量,全局变量在整个程序中均可见。且可以在整个程序的任何位置进行修改。而static变量,只在声明它的函数内看见,也只有在声明它的函数内可以被修改。即便在函数外或其它函数中有同名的变量,也和它不是同一变量。和局部变量相比,局部变量在每次调用函数时,变量值都会重置。而stati...
但是,如果使用static修饰全局变量,全局变量的外部链接属性会变成内部链接属性,导致其他得源文件就不能再使用这个源文件。所以,程序执行才会出错。 在使用static全局变量时,给我们的 感觉是这个全局变量的作用域变小了,从整个项目变成了当前源文件,实质上是全局变量的外部链接属性会变成内部链接属性,从而导致了这种结果。
在 C 语言当中,变量的存储类型只能使用一个。因此 register 和 static 是不能放在一起共用的。即便是可以放在一起,register 也不能跟 static 一起共用。这是因为 static 所修饰的变量,称之为静态变量。静态变量的生命周期和全局变量是一样,如果放在寄存器中,也是白白浪费了一块地方。2.5 寄存器的数量是有限...
将上面的函数修改为可重入的函数很简单,只要将声明sum变量中的static关键字去掉,变量sum即变为一个auto 类型的变量,函数即变为一个可重入的函数。 当然,有些时候,在函数中是必须要使用static变量的,比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。
我们看到有两个类型是 OBJECT 的数据,全局的,a和b。这样子这两个值就是可以被外部引用,进行修改的了。 如果我们把 add.c 中的 int a=5;改成static int a=5;那么最终链接的时候hello.o 就找不到a变量,导致链接失败。 这也就是static的作用,让只想对当前的.c能访问,做的对修饰的变量或者函数进行限定。
从这里终于也能知道一个东西的原因了,那就是为啥被static修饰的局部变量的值可以被重复的访问和修改 常见的代码栗子如下: //main.cpp#include<iostream>usingnamespacestd;voidtest(){staticinta=0;cout<<"a = "<<a++<<endl;}intmain(intargc,constchar*argv[]){for(inti=0;i<20;i++){test();}return...