C/C++关键字之static

static是静态的意思

C语言中static的作用

1. 在函数体内,静态变量具有“记忆”的功能,即在函数体内部一个被声明为静态的变量在函数的调用过程中值是不变的,初始化只会被执行一次

2. static全局变量和全局函数只能被本程序的函数所使用,不能被其它文件使用。一般的全局变量和全局函数可以被项目其它文件所使用

3. static变量,不论是全局static变量还是static局部变量,都是存储在内存中的全局数据区(静态存储区),如果我们没有对该变量初始化则默认值为0

C++中static的作用

1. 除了C语言中具有的作用之外,还有其它的作用

2. 在C++中,在类内部数据成员或类成员函数声明前面加上static说明该数据成员和成员函数属于类的静态成员变量和静态成员函数

3. 类的静态成员变量是属于某一个类,在所有实例化对象中共享访问,必须被初始化并且只能初始化一次

4. 类的静态成员函数式属于某一个类,在所有实例化对象中共享访问,类的静态成员函数没有this指针因此只能够访问类的静态成员变量

问题:为什么static局部变量只能被初始化一次?

原因是所有的static变量都是存储在全局数据区(静态存储区),因此它的生命周期和源程序一样,所以只需要被初始化一次。

例子1 :

#include<stdio.h>

void Fun(int i){
    static int value = i++;
    printf("%d\n", value);
}

int main(){
    Fun(0);
    Fun(1);
    Fun(2);
    return 0;
}

程序输出结果是

0

0

0

解释如下:

1. 因为static局部变量只能被初始化一次,因此第一次执行函数Fun(0)的时候,会执行static int value = i++,则value = 0则第一次输出0

2. 第二次和第三次调用函数Fun(1)和Fun(2)的时候由于不在执行初始化因此value的值还是0,输出值为0

例子2:

#include<stdio.h>

void Fun(int i){
    static int value = i++;
    value = i++;
    printf("%d\n", value);
}

int main(){
    Fun(0);
    Fun(1);
    Fun(2);
    return 0;
}

程序输出

1

1

2

解释如下:

1. 因此static局部变量只能被初始化一次,因此第一次执行函数Fun(0)的时候,会执行static int value = i++,则value = 0,i = 1接下来执行value = i++,则value = 1,输出1

2. 第二次和第三次调用函数的时候,i为1和2,只会执行value = i++,因此value的值为1和2,输出1和2。

时间: 2024-11-02 20:42:56

C/C++关键字之static的相关文章

AS 2.0 static 关键字

关键字 static关键字在 ActionScript 2.0 里面也比较重要.如果一个属性是静态的,那么我们可以直接调用-- static(静态)关键字在 ActionScript 2.0 里面也比较重要.如果一个属性是静态的,那么我们可以直接调用,而不用去使用类的Instance 来调用.大部分属性都是要通过类的 Instance 来操作的,那就意味着,它们不是静态的. 例子: // 创建 myClass 的 Instance myInstancemyInstance = new myCla

Java关键字介绍之static

1.关键字static(先记住这些,再往下看) 1)静态方法和静态变量是属于某一个类,而不属于类的对象. 2)静态方法和静态变量的引用直接通过类名引用. 3)在静态方法中不能调用非静态的方法和引用非静态的成员变量.反之,则可以. 4)静态变量在某种程序上与其他语言的全局变量相类似,如果不是私有的就可以在类的外部进行访问. 2.何时使用static 在我们创建一个类的实例时(对象),通常使用new方法,这样这个类的数据空间才会被创建,其方法才能被调用. 但是,有时候我们希望一个类虽然可以被创建n个

java之static关键字用法实例解析_java

本文实例讲述了java中static关键字用法,分享给大家供大家参考.具体分析如下: 一.介绍: 1.在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份. 2.用static声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法中不可访问非static成员.(静态方法不再是针对于某个对象调用,所以不能访问非静态成员) 3.可以通过对象引用或类名(不需要实例化)访问静态

php中static和const关键字用法分析_php技巧

本文实例讲述了php中static和const关键字用法.分享给大家供大家参考,具体如下: static关键字在类中描述的成员属性和成员函数都是静态的. static成员能限制外部的访问,因为static成员是属于类的,而不是属于任何对象实例. 从内存的角度讲,其中对象是放在"堆内存"中,对象的引用是放在"栈内存"中,而静态成员被放在初始化静态段中,在类的第一次加载的时候加入的.可以让对内存中的所有对象所共享.如下图所示: <?php class Person

extern关键字

extern可置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.另外,extern也可用来进行链接指定. 1关键字编辑 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a: 请问,这样可以吗? 答案与分析: 1).不可以,程序运行时会告诉你非法访问.原因在于,指向类型T的指针并不等价于类型T的数组.extern char *a声明的是一个指针变量而不是字符数组,因此与实

PHP自定义函数获取搜索引擎来源关键字的方法_php技巧

本文实例讲述了PHP自定义函数获取搜索引擎来源关键字的方法.分享给大家供大家参考,具体如下: 获取搜索引擎来源关键字的函数: function getKeywords() { // 搜索引擎关键字映射 static $host_keyword_map = array( 'www.baidu.com' => 'wd', 'v.baidu.com' => 'word', 'image.baidu.com' => 'word', 'news.baidu.com' => 'word', '

PHP面向对象开发之类的常用关键字

类中的常用关键字 1.fianl:锁 2.self:有点类似与this关键字 3.static:静态属性 4.const:常量关键字 1.关键字:fianl 用来定义类和方法的一个重要关键字,当定义类的时候该类不能被继承,用来定义方法的时候该方法不能被重载. 1. final不成修饰成员属性(类中常不是用这个关键字) 2. final只能修饰类和方法 作用: 使用final修饰的类 不 能被子类继承 使用final修饰的方法不能被子类去覆盖 用来限制类不被继承,方法不被覆盖就使用fianl 类使

java-基础-static

"static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法.这实际上正是static方法的主要用途." 这段话虽然只是说明了static方法的特殊之处,但是可以看出static关键字的基本作用,简而言之,一句话来描述就是: 方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通

C++类中的static和const用法实例教程_C 语言

static和const是C++程序设计中非常重要的概念,本文实例列举了C++类中的static和const的规则和用法.供大家参考借鉴.具体说明如下: 首先以代码用来举例说明.示例代码如下: class A { public: A():m(10) //const成员必须在构造函数的初始化构造列表中初始化 { q = 40; } void fun1()const { m++; //错误.const成员是常量,不能改变其值. n++; //正确.static变量n属于类,但是每个对象的函数都可以访