精华内容
下载资源
问答
  • c语言static作用
    2021-05-18 10:30:06

    《c语言中static的作用》由会员分享,可在线阅读,更多相关《c语言中static的作用(3页珍藏版)》请在人人文库网上搜索。

    1、static 的作用(精辟分析)在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1 )先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c int fun( void )static int count = 10;/事实上此赋值语句从来没有执行过return cou nt-;int count = 1;int main( void )pri ntf(globalttlocal static n);for (; count int a;int main( void )int i;static char str1O;pr in tf(i nteger: %d; stri ng: (beg in )%s(e nd), a, str);return 0;程序的运行结果如下integer: 0; string: (begin)(end)static最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为变量存放在静态存储区,所以它具备持久性和默认值0。

    更多相关内容
  • C语言static关键字的作用
  • C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,...
  • **************************C语言中的static的用法******************************** ******************************************************************************* static变量 ( 修饰全局变量 与 局部变量)...
    *******************************概念********************************************
    *******************************************************************************
    首先得明白全局变量、静态全局变量、局部变量、静态局部变量的概念,下面进行举例:
    //main.c文件中
    int a = 0; //全局变量
    static int b=0;//静态全局变量
    main() 
    { 
    int c; //局部变量
    static int d;//静态局部变量 
    }
    • 全局变量:具有全局作用域,全局变量只需在一个源文件中定义,就可以作用于所有的源文件。
    • 静态全局变量:具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被 static 关键字修饰过的变量具有文件作用域。
    • 局部变量:具有局部作用域,它是自动对象(auto),它在程序运行期间不是一直存在,而是只在函数执行期间存在,函数的一次调用执行结束后,变量被撤销,其所占用的内存也被收回。
    • 静态局部变量:具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。
    **************************C语言中的static的用法********************************
    *******************************************************************************
    static变量 ( 修饰全局变量 与 局部变量) 的例子:  
    #include<stdio.h>
    static int j; //修饰静态的全局变量
    int funOne(void)
    {
            static int i = 0;//修饰静态的局部变量
            i++;
            return i;
    }
    
    int funTwo(void)
    {
            j = 0;
            j=j+2;
            return j;
    }
    
    int main()
    {
            int k = 0,m = 0,n = 0;
            for(k = 0;k < 5;k++)
            {
                    m = funOne();
                    n = funTwo();
                    printf("m=%d,n=%d\n",m,n);
            }
            return 0;
    }
    
    ****************结果显示如下****************
    m=1,n=2
    m=2,n=2
    m=3,n=2
    m=4,n=2
    m=5,n=2
    ************对结果的解释说明************
    对于funOne( ),运行一次之后,变量i保持了原来的数据,并没有销毁,而是在下一次调用的时候继>续使用,所以才会有1、2、3…5这样的结果。而对于funTwo( ),运行一次之后,变量j的值被销毁了,所>以第二次调用结束j仍然保持原值“1”,所以循环五次,每次都是1
    1、static修饰全局变量——静态全局变量

        使用方法:在全局变量前面加static关键字,例如:static int i = 0;

        初始化:未经初始化的全局变量会被自动初始化为0(自动对象的值是任意的,除非他被显示初始化);

        存储的位置:静态存储区 (static) ,全局变量和静态变量是存储在一起的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统自动释放。

        变量的作用域:具有全局作用域,只初始化一次,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被 static 关键字修饰过的变量具有文件作用域。(使得作用域仅限于被定义的文件中 即,从变量定义到本文件结尾处,其他文件不论通过什么方式都不能访问)。

        总结:静态局部变量值初始化一次;若不赋初值,在初始化的时候会自动赋值为0;只作用于定义他的文件中,不能作用于其他的文件中;把全局变量改变为静态变量是改变了他作用域。

    2、static修饰局部变量——静态局部变量    

        使用方法:在局部变量前面加static关键字,例如:static int j; 

        初始化:未经初始化的局部变量会被自动初始化为0(自动对象的值是任意的,除非他被显示初始化);

        存储的位置:静态存储区 (static) ,全局变量和静态变量是存储在一起的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统自动释放。

        引入静态局部变量的原因:

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

         变量的作用域:具有局部作用域,它只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。(当定义他的函数或者语句块结束的时候,作用域结束,但是当局部静态变量离开作用域后,并没有被销毁,而是仍然驻留在内存当中,只不过我们不能再对他进行访问,直到改函数再次被调用吗,并且值不变)

        总结:静态局部变量值初始化一次;若不赋初值,在初始化的时候会自动赋值为0;只对定义自己的函数体始终可见;把局部变量改变为静态变量是改变了他的存储方式即改变了他的生存周期。

        静态局部变量与动态局部变量的区别: 

    (1)静态局部变量数据属于静态存储类别,在静态存储区内分配内存单元,在整个程序运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占

    用静态存储区空间,函数调用结束后立即释放空间。

    (2)静态局部变量时在编译时被赋值的,即自始至终只赋值一次,在程序运行时它已经有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而自动变量赋初值,不是在编译时进行的,而是在运行时进行,所以每调用一次函数就赋一次初值。

    (3)如在定义局部变量时不赋初值,则对静态局部变量来说,编译时自动赋一个初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值,则它的值是一个不确定的值。这是由每次动态分配的内存单元不同所决定的。

    static变量 ( 修饰全局变量 与 局部变量) 的例子:  

    /*在text.c文件中*/
    int func_int()
    {
            return 2;
    }
    
    static int func_static()
    {
            return 3;
    }
    /*在main.c文件中*/
    #include<stdio.h>
    void main()
    {
            int temp2 = func_int(); 
            int temp3 = func_static();              
            printf("temp2 = %d\n",temp2);
            printf("temp3 = %d\n",temp3);
    }  
    //编译链接[root@node-2 C_function]# gcc main.c test.c

            验证的时候可以先把 后面两行注释掉int temp3 = func_static(); printf("temp3 = %d\n",temp3); 

    ***************结果显示如下*************
    [root@node-2 C_function]# gcc main.c test.c 
    /tmp/ccg1gHfy.o: In function `main':
    main.c:(.text+0x1b): undefined reference to `func_static'
    collect2: error: ld returned 1 exit status
    

    3、static修饰函数——静态函数(内部函数)

       在函数前加static,则此函数成为静态函数(内部函数),我们用static修饰函数的主要目的是:用来表示不能被其它文件访问的一个函数(和用static修饰全局变量的目的一样,都是不允许其它文件访问)。这样一来便有一个好处:程序员不用担心自己编写的函数与其他文件的函数同名。(对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件


    参考的网址:

    1》变量在内存中的存放区别:https://www.cnblogs.com/bakari/archive/2012/08/05/2623637.html

    2》C\C++中STATIC的用法:https://www.cnblogs.com/jhmu0613/p/7131997.html

    3》四个变量间的区别:https://www.cnblogs.com/zhangwuji/p/5297631.html

    4》部分内存的分布情况:https://blog.csdn.net/jsjwql/article/details/1788286


    展开全文
  • staticC语言中的作用 1、修饰局部变量 在修饰局部变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。 /* 由static修饰的变量,其存储类型为全局...

    static 在C语言中的作用

    更多内容欢迎访问我的网站

    1、修饰局部变量

    • 在修饰局部变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放
    /*
    由static修饰的变量,其存储类型为全局静态区。
    变量在程序的整个运行过程中不会被销毁,并且只会被初始化1次。
    */
    void func1()
    {
        static int a1 = 1;        // 在全局静态区分配变量a1的存储空间
        int a2 = 1;               // 在栈区分配a2的存储空间
        a1 = a1+1;   
        a2 = a2+1;
        printf("a1=%d, a2=%d", a1, a2);
    }
    
    void main()
    {
        func1();
        func1();
        func1();
    }
    
    /*
    运行结果:
    a1=2, a2=2
    a1=3, a2=2
    a1=4, a2=2
    */
    

    2、修饰全局变量

    • static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以
    • 静态全局变量的作用域仅限于本文件,不会被其他文件所访问、修改。当其他文件中使用相同名字的变量时,不会发生冲突。

    3、修饰函数

    • static修饰一个函数,则这个函数只能在本文件中调用,不能被其他文件调用。
    • static关键字修饰函数或是全局变量时,起到的都是限定作用域的作用。
    static int a1 = 1;       // 限定全局变量a1仅在本源文件可见
    static void func1()        // 限定函数仅在本源文件可见
    {
        static int a2 =1;     // a2是静态变量,不是栈变量,只被初始化一次
    }       
    
    void main()
    {
        func1();
    }
    
    展开全文
  • C语言中,static作用有三条:一是隐藏功能,二是保持持久性功能,三是默认初始化为0。本文重点给大家介绍C语言static作用c语言中使用静态函数有何好处,对本文感兴趣的朋友一起看看吧
  • C语言static关键字的作用详解,全网最透彻

    万次阅读 多人点赞 2018-07-09 09:41:29
    C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。(1)先来介绍它的第一条也是最重要的一条:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解...

    在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。


    (1)先来介绍它的第一条也是最重要的一条:隐藏。

    当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c。

    下面是a.c的内容

    复制代码代码如下:

    char a = 'A'; // global variable
    void msg() 
    {
        printf("Hello\n"); 
    }

     下面是main.c的内容
    复制代码代码如下:

    int main(void)
    {    
        extern char a;    // extern variable must be declared before use
        printf("%c ", a);
        (void)msg();
        return 0;
    }

    程序的运行结果是:

    A Hello

    你可能会问:为什么在a.c中定义的全局变量a和函数msg能在main.c中使用?前面说过,所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。此例中,a是全局变量,msg是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。

    如果加了static,就会对其它源文件隐藏。例如在a和msg的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。

    (2)static的第二个作用是保持变量内容的持久。存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。虽然这种用法不常见,但我还是举一个例子。

    复制代码代码如下:

    #include <stdio.h>

    int fun(void){
        static int count = 10;    // 事实上此赋值语句从来没有执行过
        return count--;
    }

    int count = 1;

    int main(void)
    {    
        printf("global\t\tlocal static\n");
        for(; count <= 10; ++count)
            printf("%d\t\t%d\n", count, fun());    

        return 0;
    }


     程序的运行结果是:

    global          local static

    1               10

    2               9

    3               8

    4               7

    5               6

    6               5

    7               4

    8               3

    9               2

    10              1

    (3)static的第三个作用是默认初始化为0。其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加'\ 0'太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是'\0'。不妨做个小实验验证一下。

    复制代码代码如下:

    #include <stdio.h>

    int a;

    int main(void)
    {
        int i;
        static char str[10];

        printf("integer: %d;  string: (begin)%s(end)", a, str);

        return 0;
    }


    程序的运行结果如下
    复制代码代码如下:

    integer: 0; string: (begin)(end)

    最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。

    以上内容出自博客园Mr. Write之手,写的相当清晰易懂,存档方便复习。

    下面是中兴通讯2012校招笔试题的一道问答题:

    1. static全局变量与普通的全局变量有什么区别 ?

      全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

      全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。

      这两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

      static全局变量只初使化一次,防止在其他文件单元中被引用;  

    2.  static局部变量和普通局部变量有什么区别 ?

       把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。 

      static局部变量只被初始化一次,下一次依据上一次结果值;  

    3.  static函数与普通函数有什么区别?

       static函数与普通函数作用域不同,仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static修饰的函数),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件.

    展开全文
  • c语言中的static关键字的作用

    万次阅读 多人点赞 2018-08-19 17:42:15
    在我们日常使用过程中,static通常有两个作用: 1、修饰变量 静态全局变量:全局变量前加static修饰,该变量就成为了静态全局变量。我们知道,全部变量在整个工程都可以被访问(一个文件中定义,其它文件使用的...
  • c语言static

    2021-05-20 05:27:26
    c语言static[编辑]概述static在C语言中是静态存储类型的意思,用static声明的变量在函数调用结束后依然存在,也就是在整个程序中都能用这个变量。c语言:C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标...
  • 1.具有隐藏的作用 当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。 2.保持变量内容的持久 变量不加 static 修饰: #include <stdio.h> void test() { int num = 0; num++...
  • C 语言中 static作用

    2020-12-28 17:50:44
    (1)隐藏。 当我们同时编译多个... static 可以用作函数和变量的前缀,对于函数来讲,static作用仅限于隐藏,而对于变量,static 还有下面两个作用。 (2)static 的第二个作用是保持变量内容的持久。 ...
  • static用于修饰局部变量时,通常在某个函数体内,只能在此函数内调用。 void test() { int i = 0; i++; printf("%d ", i); } int main() { int i = 0; for (i = 0; i < 10; i++) { test(); } return...
  • C语言static变量的作用
  • static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就staticc语言中的应用进行总结,供参考使用。错漏之...
  • C语言static的使用

    千次阅读 多人点赞 2019-05-10 16:55:13
    static作用(修饰函数、局部变量、全局变量) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加...
  • static和const的作用是什么 无论在面试还是在平时的考试,这个问题出现的频率都是非常高的,但是网上有些解释太过详细,接下来我将给大家总结性的说一下这两个关键字的具体作用static作用 1). 在函数体,一个被...
  • C语言中,static关键字修饰变量和函数 1、局部变量 2、全局变量 3、函数 修饰局部变量 1、用静态关键字static修饰的局部变量,在编译的过程中,会在数据区为该变量开辟空间,并对其进行初始化,如果代码中未对其进行...
  • 接上文:C语言的32个关键字C语言 static 关键字的常见用法有三种:用于局部变量的修饰符;用于全局变量的修饰符;用于函数的修饰符。1、用于局部变量的修饰符当 static 用于修饰局部变量时,通常是在某个函数体内,...
  • c语言static关键字用法详解

    万次阅读 多人点赞 2018-04-05 18:18:14
    static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语言初学者,static由于使用灵活,并不容易掌握。本文就staticc语言中的应用进行总结,供参考使用。错漏...
  • static从英文上翻译是静态的意思,在C语言static所起的作用也正是静态。对于局部变量而言,其作用域是局部的如某一子函数体,程序在每次执行时调用该子函数时,其声明的局部变量都会重新赋值。那如果我们想让程序...
  • 主要介绍了C语言 static、extern与指针函数,有需要的朋友可以参考一下
  • C语言——static关键字的作用与实例

    千次阅读 多人点赞 2020-03-15 15:26:23
    C语言中,static关键字的作用与实例 在c语言的学习和应用中,会遇到很多常见的关键字,比如auto 、break 、case 、char 、 const 、 continue、 default、 do 、 double 、else 、 enum、 static、 extern等等。 ...
  • C语言static 关键字总结

    万次阅读 多人点赞 2018-05-25 10:49:05
    static 关键字总结: 变量可以被static 修饰,意义有发生变化吗? 下面我们看个例子: (1)变量不加 static 修饰 #include &lt;stdio.h&gt; void test() { int num = 0; num++; printf("%d &...
  • C语言 static用法详解

    2019-11-01 15:54:05
    在 C 语言中,static 的字面意思很容易把我们导入歧途,其实它的作用有三条。 隐藏 当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译...
  • C语言static关键字用法和作用

    千次阅读 2021-04-11 00:15:44
    static修饰不同对象时的作用: 1.局部变量: 局部变量就是在函数内定义的变量,普通的局部变量,生存周期是随着函数的结束而结束,每次函数重新执行,局部变量都是新的值,不会保留上次的值。当用static修饰后,局部...
  • static在c里面可以用来修饰变量,也可以用来修饰函数。先看用来修饰变量的时候。变量在c里面可分为存在全局数据区、栈和堆里。其实我们平时所说的堆栈是栈而不是堆,不要弄混。 代码如下:int a ;int main(){ int b ...
  • 作用是什么发布时间:2020-04-30 10:07:02来源:亿速云阅读:290作者:小新今天小编给大家分享的是c语言static是什么意思?作用是什么,相信很多人都不太了解,为了让大家更加了解static,所以给大家总结了以下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 226,851
精华内容 90,740
关键字:

c语言static的作用