汉邦问答 / 问答 / 问答详情

c语言中 函数调用结束后,函数内定义的静态变量所

2023-06-10 08:42:06
meira
函数内定义的静态变量,形式上是局部变量,但与一般局部变量不同:
1、一般的局部变量在函数结束后就释放了,下次调用时重新申请空间;
2、“静态局部”变量,在函数调用结束后,空间不释放,保留结束前的值,直到下次调用时作为初值使用,要到整个程序退出时才释放
Ntou123

不正确,函数内的静态变量在该函数调用结束后,且该函数所在的模块没有被释放的情况下,这个静态变量值为上次函数调用后的值。这样说比较抽象。举例说明一下:

void

aa()

{

static

int

s_icount;

//c语言默认初始化0值

s_icount++;

//每调用aa()一次,s_icount会自加一次

printf("%d ",

s_icount);

}

void

main()

{

aa();

//第一次调用

aa();

//第二次调用

}

运行输出:

1

2

说明:aa()中的

s_icount,只能在aa()中访问操作,不能在其外的函数中操作,也不能在main()中直接访问。

C语言静态变量问题?

这不是很明显嘛,func先被调用4次(i从1到4,循环调用4次),打印输出再调用一次,m++后加操作,因此要少算一次,也就是4+1-1=4.
2023-06-10 01:02:332

c语言中静态变量需要自己释放?那外部变量属于静态存储方式,书上说静态变量的生存期是整个程序的运行期

对,一个运行的程序属于一个进程,进程是由操作系统管理的,程序结束了,该程序所占用的资源会由操作系统来回收。静态变量的静态:变量占用的存地址不释放,也就是说它的地址它从头到尾一内直占着,容不给其他内存单元占用而已,其本身的值是可以改变的。动态的变量:比如调用函数体里定义的变量,在函数执行后便释放出去,把有用的地址资源贡献给其他量,释放以后如果你用指针来打印这个地址的值的话,就很有可能不是原来的值了。扩展资料:静态变量也可以用于存储常数。具体来说,静态变量(全局变量及汇编语言里定义的符号亦同)可用const,constant或final(根据语言决定)等关键字标识,这时其值就会在编译时设定,并且无法在运行时改变。编译器通常将静态常量与文本一起置于目标文件的文本区域,而非常量初始化数据则置于数据区;而如若有需要,有些编译器还可选择为其开辟专用区;为防止常数变量被错误的指针写入覆盖,亦可在这块区域启用内存保护机制。参考资料来源:百度百科-静态变量
2023-06-10 01:02:511

c语言的静态变量的格式是什么?

static 分两种一种静态局部变量 一种是静态全局变量static in a;或者static int a = 0;
2023-06-10 01:03:032

C语言中的静态变量

这两个都是静态局部变量,static int a =4;因为在if程序块中,它的有效区域更小。静态局部变量的特点,静态是说,在同一个进程中第二次调用是上次运算过的值,局部变量是在函数内部,包括main函数内部声明的变量。。。
2023-06-10 01:03:123

C语言中的静态变量

其实是这样的。静态变量在内存中存储的位置,与全局变量是同一个区域。所以,在编译期间,它的存储和大小就已经确定了,也就是已经分配了空间了。而在c语言中,“分配内存”往往看做是变量被定义的一个标志。所以,你在运行程序的时候,由于静态变量已经分配过内存了,不会再次进行分配了,它的定义语句就不会再次被执行了。
2023-06-10 01:03:311

有关c语言函数静态变量

当i=0时,运行f(a++),此时a++取2,a=3.函数中a=c++,b++;a取3,c=4,所以函数返回3,k=f(a++)=3;当i=1时,运行f(a++),此时a++取3,a=4.函数中a=c++,b++;注意c是静态的所以c=4(保持上次运算结果),所以函数返回4,k=f(a++)=4;注意这边是k=+f(a++)而不是k+=f(a++);所以k每次被重新赋值
2023-06-10 01:03:492

C语言里面静态变量static是什么作用啊?

static关键字在C语言中用于声明一个静态的局部变量。作用:有时希望函数中的局部变量的值在函数调用结束后不消失而继续保留原值,即其占用的存储单元不释放,在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值)。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。用静态存储要多占内存(长期占用不释放,而不能像动态存储那样一个存储单元可以先后为多个变量使用,节约内存),而且降低了程序的可读性,因此若非必要,不要多用静态局部变量。
2023-06-10 01:04:041

C语言的静态变量

初始s = 4s+=f(0) ===> f(0) = 5 + 3 = 8 ==> s = 4 + 8 = 12s+=f(1) ===> f(1) = 4 + 4 = 8 ==> s = 12 + 8 = 20 s+=f(2) ===> f(2) = 6 + 5 = 11 ==> s = 20 + 11 = 31 最后的结果: s = 31
2023-06-10 01:04:113

C语言中一个关于静态变量的问题

你要记住静态变量的特点:1.定义时的初值赋值只执行初始一次;2.它的值是在静态区分配的,再次执行时它值并不消失;这不很简单,它的值再次执行都是存在的;而局部变量(自动变量)就不同了,每次重新分配,重新初始;上面程序中,主程序中的m是局部变量,栈中分配的;子程序中m是静态变量,静态区分配的,这两个m是不同的变量。
2023-06-10 01:04:181

C语言的中静态变量

前面的答案都是错的,正确的答案应该为i=10,,j=1 解释: 首先你要明确什么是静态定义static你理解“静态变量只接受第一次赋值”说明你对static还有一点认知,但是不完全正确 本题的关键在于“静态全局变量j的定义”还有你对“赋初值”的理解 由于“如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0”因此staticintj;和staticintj=0;是完全等价的这样函数f2定义中的j=0;只是纯粹的赋值,则无论是第一次循环还是第10次循环,j=0;语句都不是一个初始化的语句,这点需要明确 我想你只要弄明白这点,本题的答案是怎样得来的你就完全清楚了,你主要是对static的理解不完整而已 附带一提,定义和声明函数时,如果参数类型为空可以省略即voidf1(void){......}voidf2(void){......}中的void是完全多余的,它和voidf1(){......}voidf2(){......}完全等价
2023-06-10 01:04:271

简单c语言问题,有关静态变量

int main(){ int i=0; i=square(i); for(;i<3;i++) int i =0; int i =1; int i =2 int i=3 就不进入for里了 { static int i=1; static i =1; static i=2; static i=6 i+=square(i); i =2 i+=4 所以i =6 i+=36; printf("%d,",i); 2 6 42 } printf("%d ",i); 打印int i =3 return 0;}
2023-06-10 01:04:482

C语言中静态变量赋初值是什么赋值

static
2023-06-10 01:04:574

C语言中:静态变量是不是可以不需要初始化?

可以,但是如果没有初始化,则静态变量的内存在编译时会自动清零。
2023-06-10 01:05:061

在C语言中static有什么含义

静态的注意与const的区别
2023-06-10 01:05:166

static在c语言中的用法

static在c语言中是私有、静态意思。用于在函数中声明“静态变量”用,在每一次调用后,该变量并不在函数返回时立即释放,变量中保存的值,可以保留到下一次调用时继续有效。私有就是隐藏。static函数只能声明后的本文中调用。static全局变量只能声明后的本文中调用。static局部变量只能声明后的本函数调用静态就是一直存在,相对于每次调用动态分配而言。static函数未验证是否每次调用代码地址都是一致的。static全局变量生命周期到程序或进程结束。static局部变量生命周期到程序或进程结束。static的使用和作用静态全局变量。全局变量前加static,修饰全局变量为静态全局变量,改变全局变量的可见性。静态局部变量。局部变量前加static,修饰局部变量为静态局部变量,改变局部变量的销毁时期。静态函数。函数返回类型前加static,修饰函数为静态函数,改变函数的可见性。类的静态成员。类成员前加static,修饰类的成员为类的静态成员,实现多个对象之间的数据共享,并且使用静态成员不会破坏封装性,也保证了安全性。类的静态函数,类函数前加static,修饰类的函数为静态函数,减少资源消耗,不需要实例化就可以使用。
2023-06-10 01:05:351

c语言中 函数调用结束后,函数内定义的静态变量所占用的空间被释放 这句话正确吗?求解释

错误!第一,对于动态存储方式,在函数调用开始时分配动态存储空间,函数结束时释放这些空间,例如传值的函数调用,intx=3,y=4;fun(x,y)//函数里x=4,y=3;函数调用结束后释放,main函数仍然是x=3,y=4第二,在静态存储区内分配的存储单元,在程序整个运行期间都不释放,若非必要,尽量不要静态变量intmain(){intf(int);inta=2,i;for(i=0;i<3;i++)printf("%d ",f(a));return0;}intf(inta){autointb=0;//自动局部变量staticc=3;//静态局部变量b=b+1;c=c+1;return(a+b+c);}输出为7(2+1+4)8(2+1+5)9(2+1+6)
2023-06-10 01:05:502

C语言中静态变量和外部变量的初始化是在____阶段完成的。

静态变量是在编译时就初始化的,理论上你检测不到的……一般默认0
2023-06-10 01:06:003

C语言中某一个文件里定义的static变量,那么另一个文件能否读取这个变量?

不能,但用extern可以
2023-06-10 01:06:192

C语言静态变量

静态变量就是会保存上次计算留下来的值,,而一般变量 如 你计算得到 a=1, 你关闭程序再打开, 不执行程序,直接查a的值,,它是随机的,如果是静态变量的话,a还是等于1. 这就是区别
2023-06-10 01:06:262

C语言 利用静态变量求s=1+2!+3!+……+n!的阶乘总和

第五行int i,sum=0,n;应该改为int i,sum=0,n,s;因为后面用到了s但是前面没定义s
2023-06-10 01:06:331

c语言静态变量可以做实参吗

完全可以
2023-06-10 01:06:481

C语言的中静态变量

前面的答案都是错的,正确的答案应该为 i=10,,j=1 解释: 首先你要明确什么是静态定义static你理解“静态变量只接受第一次赋值”说明你对static还有一点认知,但是不完全正确 本题的关键在于 “静态全局变量 j 的定义” 还有你对 “赋初值”的理解 由于“如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0”因此 static int j; 和 static int j=0;是完全等价的这样 函数f2定义中的 j=0;只是纯粹的赋值,则无论是第一次循环还是第10次循环,j=0;语句都不是一个初始化的语句,这点需要明确 我想你只要弄明白这点,本题的答案是怎样得来的你就完全清楚了,你主要是对static的理解不完整而已 附带一提,定义和声明函数时,如果参数类型为空可以省略即void f1(void){......}void f2(void){......}中的void是完全多余的,它和void f1(){......}void f2(){......}完全等价
2023-06-10 01:07:271

c语言中 函数调用结束后,函数内定义的静态变量所

函数内定义的静态变量,形式上是局部变量,但与一般局部变量不同:1、一般的局部变量在函数结束后就释放了,下次调用时重新申请空间;2、“静态局部”变量,在函数调用结束后,空间不释放,保留结束前的值,直到下次调用时作为初值使用,要到整个程序退出时才释放
2023-06-10 01:07:372

C语言static定义静态变量,不太懂,请解释一下

静态变量在程序运行过程中只进行一次初始化,动态变量每执行一次都要初始化一次。
2023-06-10 01:07:552

c语言静态变量输出函数问题!求大神!

多少年代的问题了。这个你也好意思问。
2023-06-10 01:08:212

关于C语言静态变量的问题 函数increment每次调用时static int x=0都执行吗

静态变量只有在第一次初始化的时候执行,以后初始化就不在执行了!!!
2023-06-10 01:08:302

C语言关于循环中包含静态变量

静态变量的值是持久的(绝对的持久,生命周期跟全局变量一样),初始化的操作实际上是在第一次执行到声明语句的时候进行的。如果写个C++的程序,static里面填一个类观察下构造器的执行时机就能看出来,C应该是类似的。这个的生命周期和作用域是不一样的,作用域是局部的,但是有永久的生存周期。
2023-06-10 01:08:401

C语言中对一个定义一个变量就是为其在内存中分配一个空间,那个空间最开始从哪分配起?

一个由C/C++编译的程序占用的内存分为以下几个部分:①栈区(stack)- 程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。②堆区(heap) - 在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。③全局区(静态区)(static)-编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后由系统释放④文字常量区 -常量字符串就是放在这里的。 程序结束后由系统释放。⑤程序代码区-存放函数体的二进制代码。分配内存,是指在内存中找个地方给这个变量,在逻辑空间上同一类型的变量是在一起的。但是,我们现在的系统都是分页分段管理的,所以会出现了逻辑地址和物理地址两个概念。逻辑地址,对于每个程序都是一样的,变量在一起、常量又在另外的地方,还有代码段、数据段等。物理地址,就是实实在在的内存(也可能是硬盘)了。
2023-06-10 01:08:521

C语言用静态局部变量来实现

#includeintf(inta){staticints=0;//静态变量Ss=s+a;returns;}intmain(){intn;scanf("%d",&n);intk=0;for(inti=0;i<=n;i++){k=f(i);}printf("%d",k);return0;}大概的意思就是静态变量不随函数调用结束释放,值一直保留到程序结束
2023-06-10 01:09:073

在C语言中具体静态变量static要这么去用?

看语句的位置了
2023-06-10 01:09:173

C语言中静态局部变量的问题

看看C Primer Plus第五版的第12章吧
2023-06-10 01:09:276

C中的static静态变量是什么意思?为什么要用静态的变量?

有一些递归的程序必须要用static声明的、、
2023-06-10 01:09:422

C语言静态变量的问题

你这个和百度百科上的例子一摸一样,我也看过的,有些东西自己看下也就明白了,http://baike.baidu.com/view/675642.htm把地址给你,以后可能会用到,
2023-06-10 01:10:002

C语言静态变量中的 “静态” 一词是怎么来的??

在PE/COFF格式的可执行文件中,有很多的内存区大致可以分成下面几类:静态存储区、栈、堆静态存储区:是在程序被操作系统转载到内存时分配的,没有初始化的静态变量被暂时的初始化为0他的生命周期为静态,连接属性为外部栈:自动变量的存储区域,是存储运行时的变量的,他的值随机,生命周期为动态,链接属性为局部(默认情况下)堆:动态变量的存储区,生命周期与连接属性要看具体的上下文环境回到你问的问题静态是相对于动态的,”动态“就是“自动”。满意请采纳,不满意请追问
2023-06-10 01:10:121

C语言关于静态变量分配储存空间,下面的代码的静态变量是仅分配一个空间吗?

你空间是电脑中的匹配的问题,对吗?的经便是分配有一个空间,他没有储存空间不一样,所以说功能就不一样
2023-06-10 01:10:203

C语言:各函数内部定义的静态局部变量可否同名

不可以,所谓的静态变量就是不会随着你的函数的结束而结束,而是随着整个程序的结束而结束,同名会出错
2023-06-10 01:10:292

有关c语言中静态变量的题目,求解题全过程和答案

注意fun函数的c是静态的,不同于main中的c。其实你也就是主要分析变量的作用域和生命域。每次调用fun函数时c都会自加1,而其b的值在调用完后会复原。详细点就是static int c和int b所存储的位置不同
2023-06-10 01:10:393

关于C语言静态变量的问题 函数increment每次调用时static int x=0都执行吗

static变量只初始化一次,每次调用结束时会保留结果,下次调用时的初始值是上一次调用结束时的值。也就是说语句staticintx=0;只会执行一次。
2023-06-10 01:11:041

设置sum函数静态变量

题主是否想询问“设置sum函数静态变量在怎么设置”?1、首先打开c语言编程软件,进入主界面。2、其次点击办成编写sum函数的静态变量程序设置,点击运行设置。3、最后打开勾选计算函数基本变量点击保存即可完成设置。
2023-06-10 01:11:101

c语言静态变量的题目,明天考试所以请今晚之前回答,先谢谢了!!

810
2023-06-10 01:11:387

C语言指针 静态变量的调用

楼上几位分析都有道理,但实际中千万别出现这样的代码。C语言对指针的有效性几乎没有什么检查,全靠程序员自己负责。严格说来,这样的程序是有危险的,访问了不该访问的内存。
2023-06-10 01:11:544

c语言静态变量的一道题

还会被删吗?不删我就回答
2023-06-10 01:12:045

C语言静态存储变量题求解答

不是题的意思是s=1+2+3+4+5t=0+1;t=0+1+2;t=0+1+2+3......
2023-06-10 01:12:273

c语言中static说明是什么意思?

说明某个变量,或者函数是静态的,是全局不变的那种,
2023-06-10 01:12:384

C语言中static修饰变量

你再仔细看看运行结果,应该不会这样的吧。全局静态变量在声明它的文件之外是不可见的,它的作用域是从定义之处开始到文件结尾。在全局变量前加static修饰的目的是限制其作用域,即:只在定义该变量的源文件内有效。你的t1.c中的全局静态变量a和t2.c中的全局静态变量a,应该是毫无关系的两个变量。
2023-06-10 01:13:193

C语言中的静态变量到底是怎么回事?不是说static 后面变量值是不变的,直到程序结束才释放,那后面的有涉

这个问题应该从变量生存期讨论。 一般自动变量的生存期会随着函数调用的结束而结束。而静态变量函数调用结束时仍然存在,直到整个程序运行结束时才结束。 具体的内容和实例可以仔细看一下书上的详细讲解。
2023-06-10 01:13:282

C的函数中的static变量初始值一定要是常量?

但就这个函数是没问题
2023-06-10 01:13:416

C语言中静态变量赋初值是什么赋值

静态变量也是变量,其值是按需要可由代码变更的,只是静态变量的生命周期和全局变量一样长,所以它的本次操作值可保留到下次当初值使用。静态变量的在声明时可以初始化,也“可以不初始化”,“不初始化”时编译器会自动初始化为0。还有,静态变量只有在本文件可见,其他文件中即是用extern也不行……
2023-06-10 01:13:571

C语言中考察静态局部变量的值

静态局部变量是为了再下一次进入其所属函数时,变量的值仍保持上一次的值.而main函数在程序的一次运行中只会运行一次,所以设置静态局部变量就没有意义了.
2023-06-10 01:14:062

1.33 C语言,静态变量的特点是什么呢,static int m=0和直接int m=0有什么区别

如果 static int m=0;是某函数中的局部变量,那么这个变量只被初始化赋值为0一次,当这个函数被多次调用时,除第一次被调用时 m 的内容被初始化为0外,以后每次调用时,m 都会在上一次函数被调用时产生结果的基础上继续运行的。例如 第一次调用 m被初始化为0, 函数运行结束时 m 的内容为 5, 第二次调用 m的内容就是5,并在次基础上继续运行程序。如果m是在某函数内部定义的局部变量,则m只在该函数内部有效m如果是全局变量,就会在定义语句之后的所有函数内有效。
2023-06-10 01:14:233