您的位置 首页 知识

c语言static的用法(staticint和int有什么区别)

c语言static的使用?

在C语言中,static 不仅可以用来修饰变量,还可以用来修饰函数,使用 static 修饰的变量, 称为静态变量。

一、static修饰局部变量——静态局部变量

结论:static 修饰局部变量改变了变量的生命周期,让静态局部变量出了作用 域依然存在,到程序结束,生命周期才结束。

static 本质上是改变了变量的存储类型,从栈区到了静态区。

(拓展:内存被划分为三个区域:

1.栈区:存放 局部变量、函数的参数等局部的、临时的变量

2.堆区:动态内存分配的

3.静态区:全局变量、static修饰的静态变量)

二、static修饰全局变量——静态全局变量

结论:一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件中使用。(同一个项目中的其他源文件内都不可使用)

全局变量,在其他源文件内部可以被使用,是因为全局变量具有外部链接属性,但是被static修饰之后,就变成了内部链接属性,其他源文件就不能链接到这个静态的全局变量了。

三、static修饰函数——静态函数

总结:一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

本质:static是将函数的外部链接属性变成了内部链接属性,和static修饰全局变量一样。

static int i与int区别?

static int 静态变量,会在静态存储区只进行一次初始化,下次调用直接赋值

int 每次调用都初始化一次,分配不同的内存地址

static int 不管在函数内还是函数外,都作为一个全局变量可以保存它被修改以后的值。

而 int 则没有这一功能,只有作为全局变量时能保存修改。放在函数内部时,每次调用都用的是一个新的数。

哪位大哥能为我解答下面的c语言题 主要是不懂答案是怎么运算出来的还有static在这个程序的作用,运算过程

  • void main(){int t=1;fun(fun(t));}fun(int h){static int a[3]={1,2,3}; int k; for(k=0;k3;k++) a[k]+=a[k]-h; for(k=0;k3;k++) printf("%d",a[k]); printf("n");return(a[h]);}这个答案是1 3 5 -1 3 7
  • static 静态变量,就是每次进入函数对该变量的赋值都保存,相当于一个全局的变量

在C语言中,register,const,static,extern分别都是什么意思,有什么用

  • register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。const限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。

求大神翻译一下这段编程语言 。 。! invoke-static {v2,v0} Lcomhu

  • 这是一段安卓程序的反编译的smali代码我查查资料帮你翻译

C语言 static的问题

  • 是不是每次进入f函数,n都是从0开始,static没用了
  • 要这么给静态变量赋初值肌单冠竿攉放圭虱氦僵:static int n=0; 这个赋值仅第1次调用时赋值

在C语言中,在函数里定义的静态变量如static int var;这个var变量可以当做全局变量吗?

  • 在函数里这样static int var;定义后,是不是函数里的变量就不在堆栈里了?变成全局的变量,外部也可以直接使用这个变量了?
  • static不改变变量的作用域,你在哪个大括号中定义的,只能在那里使用,其他地方不知道这个变量。总之带static修饰的变量并不代表一定是全局变量。