一、 static 变量
static变量大致分为三种用法
1. 用于局部变量中,成为静态局部变量. 静态局部变量有两个用法,记忆功能和全局生存期.
2. 用于全局变量,主要作用是限制此全局变量被其他的文件调用.
3. 用于类中的成员.表示这个成员是属于这个类但是不属于类中任意特定对象
1. 静态局部变量
静态局部变量属于静态存储方式,它具有以下特点:
(1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
(2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。
(3)对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
举例如下:
int fun() {
static int a = 1;
a++;
}
在第一次进入这个函数的时候,变量a被初始化为1!并接着自增1,以后每次进入该函数,a就不会被再次初始化了,仅进行自增1的操作;在static发明前,要达到同样的功能,则只能使用全局变量:
int a = 1;
int fun() {
a++;
}
2.静态全局变量
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。因此static 这个说明符在不同的地方所起的作用是不同的。
3.static的类成员变量
static关键字有两种意思,你看上下文来判断
a,表示变量是静态存储变量,表示变量存放在静态存储区.
b,表示该变量是内部连接(这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static),也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).
二、static 函数 —— 内部函数和外部函数
当一个源程序由多个源文件组成时,C语言根据函数能否被其它源文件中的函数调用,将函数分为内部函数和外部函数。
1 内部函数(又称静态函数)
如果在一个源文件中定义的函数,只能被本文件中的函数调用,而不能被同一程序其它文件中的函数调用,这种函数称为内部函数。
定义一个内部函数,只需在函数类型前再加一个“static”关键字即可,如下所示:
static 函数类型 函数名(函数参数表)
{……}
关键字“static”,译成中文就是“静态的”,所以内部函数又称静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件。
使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名,因为同名也没有关系。
2 外部函数
外部函数的定义:在定义函数时,如果没有加关键字“static”,或冠以关键字“extern”,表示此函数是外部函数:
[extern] 函数类型 函数名(函数参数表)
{……}
调用外部函数时,需要对其进行说明:
[extern] 函数类型 函数名(参数类型表)[,函数名2(参数类型表2)……];
[案例]外部函数应用。
(1)文件mainf.c
main()
{ extern void input(…),process(…),output(…);
input(…); process(…); output(…);
}
(2)文件subf1.c
……
extern void input(……) /*定义外部函数*/
{……}
(3)文件subf2.c
……
extern void process(……) /*定义外部函数*/
{……}
(4)文件subf3.c
……
extern void output(……) /*定义外部函数*/
{……}
发表评论
-
析构函数为虚函数的原因
2012-09-09 11:42 830我们知道,用C++开发的时候,用来做基类的类的析构函数 ... -
hash的应用
2012-08-31 23:02 959第一部分为一道百度面试题Top K算法的详解;第二部分为关 ... -
微软智力题
2012-08-29 19:59 564第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有 ... -
C++不能被继承的类
2012-08-27 20:16 1054一个类不能被继承, ... -
括号对齐问题
2012-08-27 10:47 1406解法一:左右括号成一对则抵消 可以 ... -
树的遍历
2012-08-19 10:43 717/****************************** ... -
堆排序
2012-08-16 14:24 881堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全 ... -
多态赋值
2012-08-14 16:16 828#include <iostream> usi ... -
不用sizeof判断16位32位
2012-08-10 15:21 1699用C++写个程序,如何判断一个操作系统是16位还是3 ... -
找出连续最长的数字串(百度面试)
2012-08-09 15:15 1144int maxContinuNum(const char*in ... -
顺序栈和链栈
2012-08-06 10:01 795顺序栈:话不多说直接上代码 #include ... -
队列的数组实现和链表实现
2012-08-05 16:20 1023话不多少,数组实现上代码: #include<i ... -
KMP算法详解
2012-08-02 21:40 879KMP算法: 是在一个“主文本字符串” ... -
字符串的最长连续重复子串
2012-08-01 15:05 9768两种方法: 循环两次寻找最长的子串: <方法一> ... -
寻找一个字符串连续出现最多的子串的方法(转)
2012-07-31 21:19 974算法描述首先获得后缀数组,然后1.第一行第一个字符a,与第二行 ... -
字符串的循环移位
2012-07-31 16:52 974假设字符串:abcdefg 左循环两位:cdefgab 右 ... -
一次谷歌面试趣事(转)
2012-07-31 15:26 762很多年前我进入硅谷 ... -
约瑟夫环问题(循环链表)
2012-07-30 21:31 1285题目描述:n只猴子要选大王,选举方法如下:所有猴子按 1, ... -
面试之单链表
2012-07-30 20:18 7241、编程实现一个单链表的建立/测长/打印。 ... -
多重继承内存地址问题
2012-07-30 15:55 725[cpp] view plaincopy ...
相关推荐
**一、static变量** 1. **静态局部变量**: 静态局部变量在函数内部定义,但不同于普通局部变量,它在整个程序运行期间都存在,而不是在函数调用结束后被销毁。这意味着,当函数被多次调用时,静态局部变量会保留...
#### static函数:内部函数与外部函数的区别 在C语言中,函数同样可以被标记为静态,这将改变其可见性和可调用性。内部函数(静态函数)只能被定义它的源文件内的其他函数调用,而外部函数则可以在整个程序中被调用...
在VB6.0编程环境中,Static变量是一种特殊的变量类型,它在函数或过程中扮演着持久化存储的角色。Static变量的特点在于,即使函数或过程执行完毕,它的值也不会被清除,而是保留下来,等待下一次调用时继续使用。这...
### 全局变量、局部变量及Static变量的区别详解 #### 一、基本概念与作用域 **全局变量(Global Variables)**: - **定义**: 在函数外部定义的变量。 - **作用域**: 全局变量在整个程序中都可被访问,只要在程序的...
Static变量 `static`变量,亦称为静态变量或类变量,与实例变量相对。其最显著的特点在于,无论创建多少个该类的实例,`static`变量在内存中仅存在一份拷贝,这意味着所有实例共享同一份变量值。这不仅节约了内存...
静态变量和方法与类紧密关联,而非与类的实例相关。下面我们将深入探讨`static`关键字的工作原理及其应用场景。 1. **静态变量** 静态变量是属于类本身而非类的实例的变量。这意味着所有类的实例共享同一份静态...
在VB6.0编程环境中,Static变量是一种特殊的变量类型,它在函数或过程中被声明,其特点是即使函数或过程执行结束,它的值也不会被清除,而是保留下来供下次调用时使用。本教程通过一个登录系统的例子来深入探讨...
5. Temp变量:Temp变量与Static变量相似,也允许在程序块内进行读写,但其特点是数据不会在扫描周期之间保持。每个扫描周期开始时,Temp变量会自动初始化为零,因此必须在每次使用前为其赋值。这种变量适合临时存储...
为了更好地理解`static`静态局部变量的作用,我们首先比较一下静态局部变量与非静态局部变量之间的区别: - **非静态局部变量**:每次函数调用时,都会重新创建这些变量,并在函数返回时销毁它们。因此,每次调用...
C语言中static变量声明的作用 在C语言中,static关键字有三个主要作用:隐藏、保持变量内容的持久和默认初始化为0。下面我们将详细解释每个作用。 1. 隐藏作用 static关键字的首要功能是隐藏。它可以使变量或函数...
C_语言静态变量和静态函数,可以让您对C语言静态变量和静态函数有更清晰的认识
本资料“PHP面向对象之旅深入理解static变量与方法”旨在帮助开发者深入理解PHP中的静态(static)变量和静态方法,这些都是OOP的重要组成部分。下面我们将详细探讨这两个概念。 1. 静态变量 静态变量是在类中定义...
### 外部变量与static内部变量的区别 #### 外部变量 - **定义**:未使用`static`关键字的全局变量。 - **特点**: - 生存期贯穿整个程序运行过程。 - 作用域覆盖整个源程序,即使在多个源文件中也可以访问。 - **...
在探讨C语言编程中,static关键字以及printf函数的格式化输出和全局变量的使用是三个密切相关且非常重要的概念。首先,static关键字在C语言中具有两种主要用途,一种用于修饰变量,另一种用于修饰函数。其次,printf...
static表示“全局”或者“静态”的意思,用来修饰成员... 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象市,不生成static变量的副本,而是类的所有实例共享同一个static变量。
在深入了解如何使用`@Value`注解给静态变量赋值之前,我们先简要回顾一下`@Value`注解的基本用法及其与静态变量的关系。 ##### 2.1 `@Value`注解简介 `@Value`注解用于将配置文件中的值注入到特定的变量中。它可以...
1、讲解static静态局部变量的原理与特点; 2、讲解static静态全局变量的原理与特点; 3、讲解static静态成员变量的原理与特点; 4、讲解static静态成员函数的原理与特点;
在编程语言中,如C++或Java,`static`关键字有着重要的作用,它主要用于定义静态成员变量和静态成员函数。本文将深入解析`static`的关键特性,并探讨它们在面向过程和面向对象编程中的应用。 首先,静态成员变量,...
例如,在函数fun中定义了一个static变量count,在每次调用fun函数时,count的值都会减少1。 3. 默认初始化为0:static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。...
本文将深入探讨`static`全局变量、`static`局部变量以及`static`函数与普通变量和函数之间的差异。 首先,让我们来理解`static`全局变量与普通全局变量的区别。全局变量在程序的整个生命周期内都存在,可以在程序的...