扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在c语言中,变量通常要求局部变量在函数最开始声明,否则会被编译器报错,这种变量的声明周期只限于在函数体内。
创新互联为企业级客户提高一站式互联网+设计服务,主要包括成都网站制作、成都网站建设、外贸营销网站建设、app软件定制开发、小程序定制开发、宣传片制作、LOGO设计等,帮助客户快速提升营销能力和企业形象,创新互联各部门都有经验丰富的经验,可以确保每一个作品的质量和创作周期,同时每年都有很多新员工加入,为我们带来大量新的创意。
像你提出的这种,可以无视刚才的要求,在函数内部任意位置声明变量,他的声明周期就是for循环内部,每次进入都是新的变量,占用栈上空间。
我有一个小窍门,方便记忆,{}内部的变量,声明周期只在当前{}内。
比如:
{
int a;
int b;
}
可以这样声明变量,甚至不需要任何循环体,或者if,这些变量一旦离开当前{},就被销毁
C语言每一次函数调用,编译器都会为这个函数调用分配一段空间,这段空间用来存放该函数中的所有局部变量和调用其它函数时需要传递的参数的副本。每一次调用这个函数,这段空间都会重新分配,函数返回后这段空间就被释放了,所以重复调用多少次都不会影响的。所有的这些函数调用时候分配的内存都是在线程的栈上的。
顺便说一下,我觉得楼上的回答是不对的: 每个线程都只会访问自己调用的函数中的局部变量的,访问局部变量是不会存在多线程问题的。会存在多线程问题的肯定不是局部变量,有可能是局部变量指向的其它可共享的对象(例如:堆对象......),或者在函数中访问了全局对象,类的成员变量等,这些并不是局部变量。
变量有两种属性:
分别是数据类型和存储类型。
一、数据类型表示数据格式(大小长度)。
比如:int,long,float,double.......
二、存储类别表示作用域和生命周期。
比如:
1、auto(自动变量是局部变量,定义局部变量时不指定存储类型,默认自动)。
作用域:定义到函数结束。
生命周期:函数调用到函数执行结束。
2、extern外部变量。
作用域:定义开始到源文件结束。
生命周期:定义开始到程序结束。
3、static静态变量。
可定义全局也可局部。
定义为局部变量不会随程序调用执行结束而释放,且定义赋初值的语句只在函数第一次调用执行。
局部静态
作用域:从定义开始到函数结束。(实际函数将静态地址做返回值返回,函数结束也能使用该地址)
生命期:从定义到程序结束。
全局静态
作用域:从定义到源文件结束。(其他文件不能通过extern来使用)
生命周期:定义开始到程序结束。
4、rigister寄存器
寄存器变量存储在cpu。
生命周期要理解数据在内存中如何变化 全局变量在程序运行完后才释放而局部变量 在用完后立马释放;
作用范围就是其作用的范围 全局变量整个程序都可以调用 而局部变量只能在某个函数中才起作用其他函数无法调用
函数内部, 不带static修饰的, 是局部变量.比如你说的j.
这种,生命周期是从定义位置, 到作用域结束.
函数内部 带static的是静态局部变量.
函数外部 带static的是静态全局变量. 带extern的是外部全局变量. 不带的 是全局变量.
静态局部变量以及所有的全局变量, 生命周期都是整个程序运行时间.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流