精华内容
下载资源
问答
  • 全局变量 全局变量不初始化时系统默认为0;局部变量没有默认值。...如果一个局部变量的值不想被释放掉,就在前面加static局部变量的值就会变为静态; 如果一个全局变量的值不想被其他文件引用,只在其所在文件中使

    全局变量

    全局变量不初始化时系统默认为0;局部变量没有默认值。

    1.静态外部变量(只限本文本)(加static)

    2.外部变量(既非静态的外部变量,允许其他文件引用)

    局部变量

    自动变量,既动态局部变量(离开函数值就会消失)(自动auto)

    静态局部变量(离开函数值保留)(使用static)

    寄存器变量(离开函数值就消失)

    (形式参数可以定义为自动变量或寄存器变量)

    如果一个局部变量的值不想被释放掉,就在前面加static局部变量的值就会变为静态;

    如果一个全局变量的值不想被其他文件引用,只在其所在文件中使用就在前加static;

    static int a;//静态局部整形变量或静态外部整形变量;。

    //函数中变量不随函数结束就消失,而保留原值,空间不释放。

    auto char c;//自动变量,在函数内定义;

    //局部变量如果不专门声明为static(静态)存储类别,都自动默认为auto动态存储区中。

    register int d;//寄存器变量,在函数内定义;

    //以前版本低,运算器与内存互交流工作,导致变量使用频率过多时就会存储和拿出运算,

    //使计算变慢,所以次函数,将所用变量暂时放入CUP存储器中。

    //对于常使用的变量,减少运算时间,就将本该存放在内存中的值,暂时存放在CPU中直接运算。

    //现在系统自动识别使用频率高的自动放入CPU的寄存器中。

    extern a;//将已定义外部变量a的作用域引用至此(可跨文件引用)

    展开全文
  • 全局变量、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局部变量: 1、 ① static局部变量在编译阶段就已经分配内存空间了,也就是函数没有调用前它就已经存在了。 ② 普通局部变量只有运行到定义该变量的时候才会分配内存空间。 2、 ① 当执行完...

    普通局部变量和static局部变量:


    1、
    ① static局部变量在编译阶段就已经分配内存空间了,也就是函数没有调用前它就已经存在了。
    ② 普通局部变量只有运行到定义该变量的时候才会分配内存空间。
     

    2、
    ① 当执行完定义该static局部变量的函数体后,该static变量的内存空间不会被释放,只有程序结束时static变量才会自动释放。
    ② 当执行完定义该普通局部变量的函数体后,该普通局部变量的内存空间就会被释放。
     

    3、
    ① 如果static局部变量不初始化,那么它默认为0。
    ② 如果普通局部变量不初始化,那么它的值为随机数。
     

    4、
    ① static局部变量的初始化语句只会执行一次,下次再运行该初始化语句就不会被初始化,但是它可以被多次赋值。
    ② 每次运行该普通局部变量的定义时该变量都会被初始化。
     

    5、static变量是存放在Data区的,该区只有程序结束时才会被释放。

    为什么static变量只能被常量赋值,而不能被变量赋值?
    例如:
    int a = 10;
    static int b = a;
    这样会报错,变量不能给static变量赋值,因为static变量是存放在Data区,它在程序编译阶段就在Data区了,但是普通变量只有在程序运行到初始化的时候才会被分配内存空间,所以static变量在编译阶段被没有初始化分配内存空间的普通变量赋值是错误的,只能用常量赋值。

     


    普通全局变量:


    1、在函数外面定义的变量为全局变量,任何地方都可以使用全局变量。

    2、在使用全局变量时,如果在前面找不到该全局变量的定义,必须在前面进行声明才可以使用该全局变量,使用extern声明,而且extern声明只针对全局变量,不能使用在局部变量。

    3、如果全局变量不初始化,那么默认赋值为0。

    4、全局变量只能定义一次,但可以声明多次。

    5、全局变量在编译阶段已经分配了内存空间,即函数没有执行前,只有在整个程序结束后才会自动释放内存空间(和static变量类似)。

    6、普通全局变量的定义和声明:
    ① 定义一个全局变量并初始化:
    int num = 100;
    ② 如果要声明一个全局变量,需要加extern:
    extern int num;

     


    static全局变量:


    1、static全局变量和普通全局变量的区别就在于文件作用域的不同,static全局变量只能在定义的文件内使用,其它文件是不能使用的,而普通全局变量在所有文件都能使用,前提是需要声明。

    2、extern关键字只适用于普通全局变量,不能跟static一起使用。

    3、不同文件定义的static全局变量即使名字一样,也是不会有影响的,因为它们是没有关系的。

    展开全文
  • 普通局部变量static局部变量的区别 内存分配和释放 1、普通局部变量只有执行到变量定义的语句的时候才分配空间。 2、static局部变量在编译阶段(函数还没有执行),变量的空间已经分配。 3、普通局部变量离开作用...

    普通局部变量与static局部变量的区别

    内存分配和释放

    1、普通局部变量只有执行到变量定义的语句的时候才分配空间。

    2、static局部变量在编译阶段(函数还没有执行),变量的空间已经分配。

    3、普通局部变量离开作用域{},自动释放其空间,也就无法使用此变量。

    4、static局部变量只有在整个程序结束的时候才将其自动释放。

    初始化

    1、普通局部变量不初始化,为随机值。

    2、static局部变量不初始化,为0。

    3、static局部变量初始化语句只有第一次执行时有效,但是可以赋值多次。

    4、static局部变量只能用它常量初始化。

    展开全文
  • int main0()//局部变量 { int i,j;//这里的 i,j两个都是局部变量 for (int k=0;k<5;k++)//这里的 k也是局部变量,一旦for循环结束,k自动释放 { printf("%d \n",10); } return 0; } void fun()//静态...
  • 一、普通全局变量和普通局部变量的关系 通常情况下,如果有两个同名变量,一个是普通全局变量,另一个是普通局部变量,那么局部变量在其作用域内具有较高的优先权,它将屏蔽全局变量。 #include #include int ...
  • 局部变量static变量

    2015-10-21 21:44:39
    局部变量:指在程序中,只在特定过程或函数中可以访问的变量,是相对于全局变量而言的。在C++、C#、Ruby这些面向对象语言中,一般只使用局部变量。在面向对象编程中现在普遍采用的是软件开发方法,因此无需考虑是...
  • static 局部变量和普通局部变量有什么区别?static 函数与普通函数有什么区别? 答案:全局变量( 外部变量) 的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也...
  • 局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序...
  • 静态局部变量和静态全程变量static

    万次阅读 多人点赞 2019-01-01 13:28:04
    static 是 C/C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。 1.1 static 的引入 我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此...
  • static修饰局部变量

    2017-11-12 21:07:47
    static修饰局部变量 static(柱国老臣)     #include "stdafx.h" //1.static 修饰局部变量,若未初始化, 则自动实始化为零。 //2.作用域未发生变化 //3.静态变量只初始化一次,生命周期,同main() ...
  • 局部静态变量static详解

    万次阅读 多人点赞 2018-05-22 08:03:20
    原帖地址: https://blog.csdn.net/zkangaroo/article/details/61202533在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该...
  • static局部变量和普通局部变量区别?static函数和普通函数区别 原创Isanti2015 最后发布于2017-08-21 20:05:50 阅读数 1288 收藏 展开 几者的区别从三个方面考虑: 1初始化时间 2 作用域 3 分配内存空间 static...
  • static静态局部变量

    2017-08-19 22:06:11
    //静态局部变量static int f(int a) { int b = 0;//等价auto int b = 0; static int c = 3; b = b + 1;//b调用结束后,释放,再次调用时还是0+1 c = c + 1;//c是static局部变量,调用结束后并不释放,
  • 根据下面的例子更好的了解静态局部变量 #include <stdio.h> int main() { int f(int); int i,a = 2; for(i=0;i<3;i++) printf("%d\n",f(a)); return 0; } int f(int a){ auto int b = 0; static...
  • static局部变量

    2016-11-27 17:35:30
    static局部变量
  • C++static声明静态局部变量在C++中,有时会希望函数中局部变量的值在函数调用结束后不消失,而保留原来的值,也就是其占用的存储单元不释放,在下一次调用该函数时,这个变量还保留上一次函数调用结束时的值,这是就...
  • 局部变量前加上“static”关键字,就成了静态局部变量。 静态局部变量存放在内存的全局数据区。 函数结束时,静态局部变量不会消失,每次该函数调用 时,也不会为其重新分配空间。它始终驻留在全局数据区,直到...
  • static静态全局变量: 静态全局变量就是将全局变量变成静态的。如何变?——全局变量加个staticstatic就是一个存储类说明符,a...static静态局部变量: 静态局部变量就是:静态变量定义在了局部的位置。 ...
  • static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别? 答: 1) 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是...
  • 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用static。 静态变量的优点:1、...
  • 普通全局变量前面加上static 就成了static全局变量,他们的存储方式都是一样,存在静态存储方式。区别在于作用范围,普通全局变量作用域是整个源程序,当一个程序有多个源文件组成时候,普通全局变量在每个源文件...
  • 1、静态变量 static 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用static...
  • 第一个问题: 为什么要引入static关键字 一个新东西的引入,一定是为了解决某个实际问题。...1.用于函数内部的局部静态变量,此时,它改变了局部变量的生命周期; 比如: void fun1() void fun2() { ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,591
精华内容 5,836
关键字:

局部变量static