静态局部变量

以前经常使用和了解static作用在全局变量前,以至于甚至把static当做全局变量的代名词,但是其实static还可以作用于局部变量前

静态局部变量的意义:

1.分配空间在全局数据栈上

2.作用域只局限于当前的函数范围内(局部)

3.生命周期为整个程序,不会随着当前的函数结束而结束

4.首次初始化时赋值生效,以后的初始化赋值自动跳过

void
fn()

{

    static
n=10;

    cout<<n<<endl;

    n++;

}

这里的n是一个静态局部变量,只有第一执行fn函数时会调用static n=10,以后都不会调用

 

有例子使用这种一次声明赋值的特性来实现单件

时间: 2024-09-29 22:31:32

静态局部变量的相关文章

c++静态局部变量和静态函数示例_C 语言

在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存.但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效.但有的时候我们需要在两次调用之间对变量的值进行保存.通常的想法是定义一个全局变量来实现.但是这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便.静态局部变量正好可以解决这个问题.静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值.该变量在全局数据区内分配内存:静态局部变量在程序执行到该对象的声明

PHP static静态局部变量和静态全局变量总结

1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它.倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值 2.静态局部变量只会初始化一次 3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式.即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量):静态变量的初始值为0. 4.当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量.虽然用全局变量也可以达到上述目的,但全局变量有时

c语言-C中什么情况下把局部变量定义为局部静态变量

问题描述 C中什么情况下把局部变量定义为局部静态变量 之前都是定义的要么是全局变量要么就局部变量,从来没加过static,现在看到有的变量前面加了static,不知道什么类型的变量要这样定义 解决方案 如果你希望在一个函数中对一个变量只执行一次初始化,以后不再初始化,使用上一次结果,就应该使用静态局部变量. 例如: static int n; 其他类型都可以. 解决方案二: 比如说你要在局部计算一个圆的半径,那么你可以将PI的值申请为static,因为PI以后再也不会变更了!希望能够帮到你! 解

PHP引用操作以及外部操作函数的局部静态变量的方法

通过引用方式在外部操作函数或成员方法内部的静态变量 下面举个简单的例子,说明三个关于引用方面的问题: 1. 参数引用后函数内进行类型转换同样是地址操作 2. 参数引用后再传递给其他函数时需要再次添加引用符才能保持地址操作 3. 函数返回值引用必须在函数申明时以及调用时都添加引用操作符 该例子使用的是对象方法的操作,同样适用于函数 <?php class A { public function & test1(& $a) { static $i = 0; var_dump($i); $

c++局部变量的经典例子

局部变量: 在函数内部声明的变量为局部变量,局部变量的意思即该变量只存活在该函数中,假如该函数调用结束,那么该变量的寿命也结束了. 举例: #include<iostream> using namespace std; void swap(int ,int );//两个参数变量可以省略 int main() { int x=3,y=4; cout<<"在main函数中,调用swap函数之前,x的值为"<<x<<",y的值为:&q

谈C#与C++在静态构造函数上的区别

在C#中,类的静态构造函数用于在使用类之前进行相关的初始化工作;比如,初始化静态成员或执行特定操作.CLR 在第一次创建该类对象或调用该类静态方法时自动调用静态构造函数.同时,CLR保证静态构造函数的线程安全性(准确地说是,只会调用一次,不存在多线程问题). 下面是MSDN对静态构造函数特点的描述: 1.静态构造函数既没有访问修饰符,也没有参数 2.在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类 3.无法直接调用静态构造函数 4.在程序中,用户无法控制何时执行静态构造函

PHP static局部静态变量和全局静态变量总结

 使用静态局部变量的原因是它不能被外部使用,但是它的值依然在没此使用后保留.虽然使用全局变量可以实现相同的功能,但是它经常会造成意外 静态局部变量的特点:   1.不会随着函数的调用和退出而发生变化,不过,尽管该变量还继续存在,但不能使用它.倘若再次调用定义它的函数时,它又可继续使用,而且保存了前次被调用后留下的值 2.静态局部变量只会初始化一次 3.静态属性只能被初始化为一个字符值或一个常量,不能使用表达式.即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变

C语言中局部变量与全局变量在内存中的存放位置

C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register) 1----局部变量和全局变量 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放.这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了.这种变量有效性的范围称变量的作用域.不仅对于形参变量,C语言中所有的量都有自己的作用域.变量说明的方式不同,其作用域也不同.C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量. 1.1局部变量 局部变量也

静态变量、静态函数 与 普通变量 普通函数的区别

关于这个问题不得不涉及到 堆 和 栈的区别 1. 内存分配 一个有c/c++编译的程序占用的内存分为以下几个部分 (1). 栈区(stack)--------由编译器自动分配释放, 存放函数的参数,局部变量的值等.其操作方式类似于数据结构中的栈. (2).堆区(heap)---------一般由程序员分配.释放.若程序员不释放,程序结束时可能由OS回收 .注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.   (3).全局区(静态区)(static)-----------全局变量和静态变量