-
2019-09-03 16:42:52
static全局变量与普通全局变量有什么区别?static局部变量与普通局部变量有什么区别?总结static 的用法!
答:全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同,这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变
量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(tatic,内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次防止在其他文件单元中被引用:
static局部变量和普通局部变量有什么区别static局部变量只被初始化一次,下一次依据上一次结果值
static函数与普通函数有什么区别static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝。
更多相关内容 -
PHP变量作用域(全局变量&局部变量)&global&static关键字用法实例分析
2020-12-20 05:53:29本文实例讲述了PHP变量作用域(全局变量&局部变量)&global&static关键字用法。分享给大家供大家参考,具体如下: 我们知道,变量呢,其实就相当于我们用来储存信息的容器。关于它的命名规则什么的,相信大家也是... -
static全局变量与普通的全局...static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2021-03-15 13:57:56C语言中讲讲static变量和static函数有什么作用static关键字有两种意思,你看上下文来判断1,表示变量是静态存储变量表示变量存放在静态存储区.2,表示该变量是内部连接(这种情况是指该变量不在任何{}之内,就象全局变量...C语言中讲讲static变量和static函数有什么作用
static关键字有两种意思,你看上下文来判断
1,表示变量是静态存储变量
表示变量存放在静态存储区.
2,表示该变量是内部连接
(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static)
,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).
当static加在函数前面的时候
表示该函数是内部连接,之在本文件中有效,别的文件中不能应用该函数.
不加static的函数默认为是全局的.
也就是说在其他的.cpp中只要申明一下这个函数,就可以使用它.
1、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
答:全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
static函数与普通函数作用域不同。static函数仅在本文件中使用。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;
static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
2、如何引用一个已经定义过的全局变量?
答:extern
可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间 会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
答:可以,在不同的C文件中以static形式来声明同名全局变量。
可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。
posted on 2009-05-29 23:20 Frank_Fang 阅读(17299) 评论(2) 编辑 收藏 所属分类: C++编程
-
全局变量、static 全局变量、局部变量、static 局部变量的理解(带实例)
2020-04-29 19:09:32全局变量、static 全局变量、局部变量的理解(带实例)全局变量static全局变量局部变量static局部变量代码输出结果参考 全局变量 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个...全局变量、static 全局变量、局部变量的理解(带实例)
全局变量
在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 、.cpp、.h 文件。当一个cpp文件需要使用另一个cpp文件定义的全局变量,通过用extern声明,就可以从“声明”处起,合法地使用全局变量
全局变量全部存储在静态存储区。在程序开始执行过程中给全局变量分配空间,程序执行完毕就释放空间。程序执行过程中固定的分配空间,而不需要动态进行分配是释放。static全局变量
全局变量前加static的作用是现在全局变量的作用范围,使该全局变量只在定义全局变量的源cpp文件中有效,其他源文件不能通过extern声明使用。
局部变量
定义在函数体、块作用域、内部的变量,作用域仅限于函数体内部、块作用域里,离开函数体、块作用域就会无效。局部变量与全局变量同名时,在该函数体内、块作用域里只会使用局部变量,自动隐藏全局变量。
程序在运行期间为局部变量动态地分配存储空间static局部变量
静态局部变量属于静态存储类别,在静态存储区内分配存储单元,在编译时赋初值,即只赋初值一次。在程序整个运行期间都不释放
代码
extern_1.h:
static int st1 = 0;//所有包含h的头文件可以被其他文件通过extern引用
extern_1.cpp:
#include<stdio.h> #include"extern_1.h" int test = 1;//全局变量,可以被其他.c、.cpp、.h文件通过extern引用 static int st2 = 0;//不!!可以被其他文件通过extern引用,static修\ 饰的全局变量只在该extern_1.cpp文件有效,其他文件无效。
extern_2.cpp:
extern int test; int test_static() { return test + 1; }
main.cpp:
#include<stdio.h> #include"extern_1.h" #include<Windows.h> extern int test; //s1已经自然包含,因s1是定义在头文件中,通过#include"extern_1.h"已经包含 //extern int st2; int f(void); int main(int argc, char const *argv[]) { //例1------------ //int test = 100;//新定义了一个局部变量,与全局变量同名,main函数里将覆盖全局变量,但是test并没作为参数传给f(),所以f()访问的还是全局变量 //printf("local test=%d\n", test);// 例2------------ test = 100;//更改全局变量的值 printf("local test=%d\n", test);// f(); f(); f(); system("pause"); } int f(void) { static int all = 1;//static 局部变量 printf("all=%d\n", all); all += 2; printf("agn all=%d\n", all); test++;//全局变量 printf("internal test=%d\n", test); st1++;//s1为static全局变量,已经自然包含,因s1是定义在头文件中,通过#include"extern_1.h"已经包含 printf("static int st1=%d\n", st1); return all; }
输出结果
main函数里给了2个例子,注释掉例2,运行例1,结果输出如下:
main函数里注释掉例1,运行例2,结果输出如下:
注意,main函数里局部变量test与全局变量同名的输出有差异,static int st2在extern_2.cpp中不可见参考
https://blog.csdn.net/u013355826/article/details/53224303/
-
static及静态局部变量使用精讲
2020-11-10 00:07:37全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。 这两者的区别在于非静态全局变量...1. static全局变量与普通的全局变量有什么区别 ?
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。
这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。
static全局变量只初使化一次,防止在其他文件单元中被引用;
2. static局部变量和普通局部变量有什么区别 ?
把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。
static局部变量只被初始化一次,下一次依据上一次结果值;
3. static函数与普通函数有什么区别?
static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
在使用中上面的意思是很好理解的,可是在具体代码里有时就不好理解了,尤其牵扯到静态局部变量的接口,在代码里很难理解,这里重点说明下
1.在局部变量前加上“static”关键字,就成了静态局部变量。
2.静态局部变量存放在内存的全局数据区,可以当成全局变量来看待。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。
3.静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则编译器自动为其 初始化为0。
4.静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见,在代码里查看静态局部变量的调用要全局搜索定义它的函数调用,其函数的调用就是静态局部变量的调用,不能简单当成局部变量来看待了,此时它跟函数绑定在一起了,既有局部变量的特征,又包含了全局变量的特征。
5.静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作的运行结果也不同。
例如,下面的程序定义了全局变量、静态局部变量和局部变量:
#include <iostream.h>
int n = 1; //全局变量
void func()
{
static int a = 2; // 静态局部变量
int b = 5; // 局部变量
a += 2;
n += 12;
b += 5;
cout << "a:" << a
<< " b:" << b
<< " n:" << n << endl;
}void main()
{
static int a; // 静态局部变量
int b = -10; // 局部变量
cout << "a:" << a
<< " b:" << b
<< " n:" << n << endl;
b += 4;
func();
cout << "a:" << a
<< " b:" << b
<< " n:" << n << endl;
n += 10;
func();
}
运行结果为:
a:0 b:-10 n:l
a:4 b:10 n:13
a:0 b:-6 n:13
a:6 b:10 n:35
程序中主函数main()两次调用了func()函数,从运行结果可以看出,程序控制每次进入func()函数时,局部变量b都被初始化。 而静态局部 变量a仅在第一次调用时被初始化,第二次进入该函数时,不再进行初始化,这时它的值是第一次调用后的结果值4。 main()函数中的变量a和b与func()函数中的变量a和b空间位置是不一样的,所以相应的值也不一样。实际工程代码中,就是使用func()函数里面的静态局部变量a,每调用一次func函数,就会改变一次静态局部变量的值,可以记录事物的状态作进一步处理。
静态局部变量总结:(1) 静态局部变量在静态存储区内分配存储单元,在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放.
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
(5) 静态局部变量的用途有许多:可以使用它确定某函数是否被调用过。使用它保留多次调用的值。
参考文献:
https://blog.csdn.net/wordwarwordwar/article/details/84931984
https://blog.csdn.net/liusicheng2008_liu/article/details/80400396
-
C/C++中static的作用(修饰局部变量、修饰全局变量、修饰函数)
2021-02-03 16:48:40一、static修饰局部变量 局部变量的作用范围为定义该局部变量的代码块或函数范围内有效,局部变量的生命周期随着函数的调用而创建,并且随着函数调用结束而销毁。static修饰的局部变量的作用域并不会改变,只是... -
局部变量,全局变量(外部变量),静态局部变量,静态全局变量
2018-03-20 16:59:43今天被问到了一个问题:如何让请求的类延迟释放如果要延迟释放或者在程序整个生命周期都存在可以考虑两种方式,一是定义一个静态变量,二是用单例。用单例本质上用的是静态变量。单例的写法如下:+ (instancetype)... -
PHP static局部静态变量和全局静态变量总结
2020-10-26 05:21:27使用静态局部变量的原因是它不能被外部使用,但是它的值依然在没此使用后保留。虽然使用全局变量可以实现相同的功能,但是它经常会造成意外 -
static 静态全局变量和静态局部变量的特性
2021-03-03 14:21:54static 静态变量 一般在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈区分配空间,函数在栈区分配的空间在此函数执行结束时会释放掉。 这样就产生了一个问题: 如果想将函数中此变量的值保存至下... -
C语言中static的用法(修饰局部变量,修饰全局变量,修饰函数)
2021-08-07 18:27:23static 修饰局部变量 - 静态局部变量 static 修饰全局变量 - 静态全局变量 static 修饰函数 - 静态函数 static 关键字的三种用法1. static 修饰局部变量 - 静态局部变量2. static 修饰全局变量 - 静态全局变量3. ... -
全局变量和局部变量在静态static修饰后的区别
2020-06-15 16:55:55在全局变量的说明之前再加以static 就构成了静态的全局变量。 全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。 这两者的区别:非静态全局变量的作用域是整个源程序... -
C语言的局部变量和外部变量
2015-08-14 06:03:04在函数体或复合语句中声明的变量为局部变量。函数中的形式变量也是局部变量。在所有函数体外定义的变量称为外部变量(或全局变量)。 -
关键字static、extern+全局变量与局部变量详解
2022-04-09 21:28:53关键字static、extern+全局变量与局部变量详解 -
C语言中 static 的用法全局变量与局部变量
2021-09-06 17:27:05C语言中 static 的用法全局变量与局部变量 1. 什么是static? static 是 C语言中很常用的修饰符,它被用来控制变量的存储方式和可见性。 1.1 static 的引入 在函数内部定义的变量,当程序执行到它的定义处时,编译器... -
static变量与全局、局部变量的区别
2018-03-28 22:09:35java之static变量与全局、局部变量的区别 static变量与全局、局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然... -
C语言中的 static变量(全局和局部)、static函数总结
2019-09-12 00:19:26同步博文:static 变量:静态局部变量:静态全局变量:static 函数…..:内部函数(又称静态函数):外部函数:[案例]外部函数应用。开心分享: 本博文的简述or解决问题? 详情: 见简介 同步博文: 本篇的csdn/... -
static 作用与说明 局部变量与全局变量
2018-01-31 22:48:52第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件... -
iOS中 static变量与全局、局部变量的区别 !
2015-12-12 22:21:24static变量与全局、局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的... -
C++局部变量,全局变量,static关键字,extern关键字
2022-04-24 15:20:04局部变量可以和外部变量重名,此时在局部变量作用域内,一直用的是局部变量 全局变量 在函数外定义的变量,也就是在main函数前面定义的变量。全局变量的作用域是定义位置到该源程序(.cpp文件)结束的位置。 如果想... -
java中局部变量、全局变量和static的区别(简单易懂)
2019-05-09 15:44:59java中的变量类型有: 1. 类变量:独立于方法之外的变量,用 static 修饰。 2.实例变量:独立于方法之外的变量,不过没有 static 修饰。 3.局部变量:类的方法中的变量。...访问修饰符不能用于局部变量... -
static函数修饰全局变量和局部变量
2019-04-09 17:59:49static int a=1; void fun1(void){ a=2; } void fun2(void){ int a=3; } void fun3(void){ static int a=4; } int main(int argc,char** args){ printf(“%d”,a); fun1( ); prin... -
C++基础——局部静态变量Static
2020-02-25 19:48:59在局部变量前加上“static”关键字,就成了静态局部变量。 静态局部变量存放在内存的全局数据区。 函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到... -
关于静态局部变量与静态外部变量
2017-11-09 19:14:10静态局部变量特点:static int a; 1:静态局部变量存储在静态存储区,如果赋有初值,函数调用期间只赋值一次,下次调用该函数时,静态局部变量值为上次调用之后的结果,原因:静态局部变量在函数调用期间是不释放的... -
静态局部变量和静态全程变量static。
2019-01-01 13:28:04static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。 1.1 static 的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此... -
C语言:局部变量与全局变量
2021-01-14 16:42:58局部变量 1)在函数内部定义,属于动态存储,其他函数不能访问,外部文件也不能访问。 2)无显式初始化时默认初始化值为随机值。 3.4静态变量 静态全局变量 与动态全局变量的主要不同:动态全局变量可以通过extern... -
【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别
2021-05-18 11:09:13静态局部变量:切断了外部链接属性。创建在static区。创建时若未初始化,则为0。全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的... -
静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)
2019-11-26 17:53:17区分静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)静态变量、动态变量、内部变量(局部变量)、外部变量(全局变量)变量的分类来看 静态变量、动态变量、内部变量(局部变量)、外部变量(全局... -
关于内部类的问题: 局部内部类访问外部类的局部变量问题(原理性问题)
2019-06-17 14:17:31关于内部类的问题: 局部内部类访问外部类的局部变量问题 编程时,在线程中使用局部变量时候经常编译器会提示:局部变量必须声明为final [java] view plain copy package test; public class ThreadTest { ... -
C语言—static 的作用、局部变量全局变量、内存结构、堆栈区别
2018-03-09 14:06:15在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数 一、定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量。 全局静态变量有以下特点: (1)在全局数据...