-
局部静态变量Static
2019-03-25 22:43:08(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。 (2) 为静态局部...(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
Ref:
-
局部静态变量static详解
2021-02-26 16:56:511.在局部变量前加上“static”关键字,就成了静态局部变量。 2.静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到...转自:https://blog.csdn.net/zkangaroo/article/details/61202533
1.在局部变量前加上“static”关键字,就成了静态局部变量。
2.静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。
3.静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其 初始化为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空间位置是不一样的,所以相应的值也不一样。
静态局部变量的用途有许多:可以使用它确定某函数是否被调用过。使用它保留多次调用的值。对静态局部变量的说明:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放.
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
-
局部静态变量Static详解
2019-10-30 21:30:30在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序...在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其 初始化为0。
静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。
例如,下面的程序定义了全局变量、静态局部变量和局部变量:
#include <iostream.h>
void func();
int n = 1; //全局变量
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();
}
void func()
{
static int a = 2; // 静态局部变量
int b = 5; // 局部变量
a += 2;
n += 12;
b += 5;
cout << "a:" << a
<< " b:" << b
<< " n:" << n << endl;
}运行结果为:
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空间位置是不一样的,所以相应的值也不一样。关于变量作用域和可见性的进一步讨论见第6 章。
静态局部变量的用途有许多:可以使用它确定某函数是否被调用过。使用它保留多次调用的值。对静态局部变量的说明:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
————————————————
版权声明:本文为CSDN博主「ShininGold」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zkangaroo/article/details/61202533 -
C++基础——局部静态变量Static
2020-02-25 19:48:59在局部变量前加上“static”关键字,就成了静态局部变量。 静态局部变量存放在内存的全局数据区。 函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到...- 在局部变量前加上“static”关键字,就成了静态局部变量。
- 静态局部变量存放在内存的全局数据区。
- 函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.
- 如果不为其显式初始化,则C++自动为其 初始化为0。
- 静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。
下面的程序定义了全局变量、静态局部变量和局部变量:
#include <iostream> using namespace std; 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(); system("pause"); }
程序中主函数main()两次调用了func()函数,从运行结果可以看出,程序控制每次进入func()函数时,局部变量b都被初始化。而静态局部 变量a仅在第一次调用时被初始化,第二次进入该函数时,不再进行初始化,这时它的值是第一次调用后的结果值4。 main()函数中的变量a和b与func()函数中的变量a和b空间位置是不一样的,所以相应的值也不一样。
静态局部变量的说明:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(而不是静态存储区空间),函数调用结束后即释放。
(2) 为静态局部变量赋初值是在编译时进行值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的 值。而为自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符型变量)。而对自动变量来说,如果不赋初 值,则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。
-
Objective-C类-Objective-C 局部静态变量 static
2011-08-26 14:25:57在变量声明前加上关键字 static,可以使局部变量保留多次调用一个方法所得的值。例如: static int hitCount = 0;...和其他常见的局部变量不同,静态变量的初始值为 0,所以前面显示的初始值是 -
PHP static局部静态变量和全局静态变量总结
2020-12-19 03:46:33即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用... -
java静态变量static内存解析_5.6 C++static声明静态局部变量
2020-11-21 08:38:01C++static声明静态局部变量在C++中,有时会希望函数中局部变量的值在函数调用结束后不消失,而保留原来的值,也就是其占用的存储单元不释放,在下一次调用该函数时,这个变量还保留上一次函数调用结束时的值,这是就... -
全局变量 局部变量 静态变量 成员变量 static关键字 值传递
2019-10-14 16:40:26static关键字修饰的变量是静态变量 使用类名.变量直接访问 当虚拟机启动时即加载变量到内存中不需要创建对象 static关键字修饰的方法是静态方法 使用类名.方法直接访问 静态方法中不能访问成员变量 类变量(静态变量... -
静态变量static
2018-09-05 21:09:07静态变量: ...所有的全局变量都是静态变量,而局部变量只有定义时加上类型修饰符static,才为局部静态变量。 静态变量并不是说其就不能改变值,不能改变值的量叫常量。 其拥有的值是可变的 ,而且... -
静态变量static、全局变量extern、局部变量、实例变量
2018-06-28 17:08:371、静态变量 static从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用static。优点:1、节省内存。... -
静态局部变量和静态全程变量static。
2019-01-01 13:28:04static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。 1.1 static 的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此... -
单片机之静态局部变量static
2020-08-03 03:48:39如果定义成局部变量,则必须定义成静态局部变量,静态局部变量是在编译时赋初值的,只赋初值一次,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。 -
【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别
2016-05-30 17:16:59局部变量: 创建在栈区(向下生长),生命周期存在于当前作用域中。 创建时若未初始化,则为随机值。...全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域, 未初始化的全局变量 -
全局和局部静态变量(static)解析
2014-03-14 10:31:56static声明主要特性是两点:生命周期和作用...如上图,静态变量是在编译完,程序还没运行就已经分配存储空间的。而自动变量(非静态的普通变量)是运行时分配的,程序还没跑就没有对应的地址空间。 生命周期与作用域 -
【C语言】局部变量、全局变量,局部静态变量,全局静态变量,extern,static的区别...
2016-02-13 10:36:07局部变量:创建在栈区(向下生长),生命周期存在于当前作用域中。 创建时若未初始化,则为随机值。全局变量:创建在static区,...全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,... -
静态变量Static
2017-08-01 11:27:46用static声明局部变量 有时希望函数中的局部变量的值在函数调用结束后...这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。 #include #include int f(int a) { auto b=0; stat -
static静态全局变量和static静态局部变量
2019-03-21 16:51:00static静态全局变量: 静态全局变量就是将全局变量变成静态的。如何变?——全局变量加个static。 static就是一个存储类说明符,a这个全局变量就成了一个...静态局部变量就是:静态变量定义在了局部的位置。 ... -
C语言基础知识:static静态全局变量?static静态局部变量?static函数?
2019-02-09 22:25:34从网络资源整理的static的三个作用 第一个作用:对其他文件隐藏。 所有未加static前缀的全局...Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。 ... -
局部静态变量和全局静态变量
2013-03-13 20:50:49静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量,例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。... -
局部静态变量和全局静态变量的区别
2016-08-11 11:57:35局部静态变量和全局静态变量的区别 // Mianshiti.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include using namespace std; static int global1; void test1() { static int num = 0...