精华内容
下载资源
问答
  • static修饰局部变量

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

    static修饰局部变量

    static(柱国老臣)
     

     

    #include "stdafx.h"
    
    //1.static 修饰局部变量,若未初始化, 则自动实始化为零。
    //2.作用域未发生变化
    //3.静态变量只初始化一次,生命周期,同main()
    //4.作用1:修饰局部静态变量,还可以用到加载图片资源上,放在按钮点击
    //5.储存在data段的rw段
    //事件中,加static避免了每次到硬盘上加载.效率不高的缺点,
    //加static后,一次加载,进程内一直使用
    //作用2:统计一个函数的调用次数
    
    void func()
    {
    
    	int i = 5;
    	printf(" i = %d\n", i++);
    
    	static int count = 0;
    	count++;
    	printf("count = %d\n", count);
    }
    
    void showStudent(int array[], int n)
    {
    	static int flag = 1; 
    	if (flag == 1)
    	{
    		printf("姓名\t学号\t性别\t年龄\n");
    		flag = 0;  //利用static控制只打印一遍
    	}
    
    	for (int i = 0; i<n; i++)
    	{
    		printf("%d\t", array[i]);
    	}
    	putchar(10);
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int array1[] = { 12, 12, 34, 34 };
    	showStudent(array1, 4);
    	int array2[] = { 12, 12, 34, 34 };
    	showStudent(array1, 4);
    	int array3[] = { 12, 12, 34, 34 };
    	showStudent(array1, 4);
    	int array4[] = { 12, 12, 34, 34 };
    	showStudent(array1, 4);
    
    	return 0;
    }

     


    结果输出:

     

     

    展开全文
  • static 修饰局部变量 - 静态局部变量 static 修饰全局变量 - 静态全局变量 static 修饰函数 - 静态函数 static 关键字的三种用法1. static 修饰局部变量 - 静态局部变量2. static 修饰全局变量 - 静态全局变量3. ...

    static 关键字有三种用法

    1. static 修饰局部变量 - 静态局部变量

    static可使得局部变量出了自己的范围也不会销毁,本质上是改变了局部变量的生命周期,但其作用域还是局部的。
    详细点说,就是有时我们希望函数中局部变量的值在函数调用结束后不销毁而继续保留原值,即希望其占用的存储单元不释放。在下一次再调用该函数时,该变量已有值(就是上一次函数调用结束时的值)。
    这时就该指定该局部变量为“静态局部变量”,用关键字static 对其进行声明。
    我们一起通过下面简单的例子来了解它的特点。

    #include<stdio.h>
    int fun(int a)
    {
    	int b = 0;
    	static int c = 3;
    	b = b + 1;
    	c = c + 1;
    	return (a + b + c);
    }
    int main()
    {
    	int a = 2, i;
    	for (i = 0; i < 3; i++)
    		printf("%d\n", fun(a));
    	return 0;
    }
    

    运行结果

    7
    8
    9

    前后三次调用fun函数,b、c的值变化如下表
    请添加图片描述
    解析:静态局部变量(c)是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而对自动变量(b)赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值。相当于执行一次赋值语句。

    另外,我们还要知道,
    如果在定义局部变量时不给它赋初值,那么对静态局部变量来说,编译时自动赋初值0(对数值型变量),或者空字符’\0’ (对字符变量)。而对自动变量来说,其值是个不确定的值。

    虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它。因为它是局部变量,只能被本函数引用,而不能被其他函数引用。

    2. static 修饰全局变量 - 静态全局变量

    全局变量本身是具有外部链接属性的,即全局变量的作用域是整个工程,但是如果用 static 修饰全局变量,就会使得全局变量失去外部链接属性,变成内部链接属性,即只能在自己的文件中使用,所以 static 修饰的全局变量时,只能在自己的 .c 文件中使用。
    我们一起来看下面这个例子:
    我们创建两个文件,add.c和test.c,此时项目可以运行。
    请添加图片描述
    输出

    2000

    但当我们一旦用static来修饰全局变量g_val时,就会报错。如下:
    请添加图片描述

    3. static 修饰函数 - 静态函数

    函数默认是有外部链接属性的,但是被 static 修饰后,会使得函数失去外部链接属性,变成内部链接属性。所以 static 修饰的函数只能在自己所在的 .c 文件内部使用,不能在其他文件中使用。和 static 修饰全局变量 很像。
    一起来看下面这个例子

    请添加图片描述
    当在函数Add前加一个static时,报错
    在这里插入图片描述

    以上就是我整理的C语言中static 关键字的三种用法。
    如有错误,大家多多指正。
    记得点赞****关注,见证我的成长!
    让我们一起学习,一起进步,加油!
    请添加图片描述

    展开全文
  • 一、static修饰局部变量 局部变量的作用范围为定义该局部变量的代码块或函数范围内有效,局部变量的生命周期随着函数的调用而创建,并且随着函数调用结束而销毁。static修饰的局部变量的作用域并不会改变,只是...

    一、static修饰局部变量

             局部变量的作用范围为定义该局部变量的代码块或函数范围内有效,局部变量的生命周期随着函数的调用而创建,并且随着函数调用结束而销毁。static修饰的局部变量的作用域并不会改变,只是生命周期会随着整个程序运行结束而结束。

    局部变量和静态局部变量的区别:

             使用static修饰局部变量的方法:在局部变量前面加static关键字,例如:static int a; 经过static修饰的局部变量称为静态局部变量,未经static修饰的局部变量称为动态局部变量。

             局部变量初始化:未经初始化的静态局部变量编译器会自动初始化为0,而未经初始化的动态局部变量编译器会自动初始化为随机值。

             存储的位置:局部变量的生命周期会随着函数的调用被创建,函数的调用入栈,因此动态局部变量存在于栈中;为了改变变量的生命周期,使得变量在函数调用完出栈后变量依然存在可以被使用,将static修饰的静态局部变量存储在静态区中,全局变量和静态变量是存储在一起的;初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,程序结束后由系统自动释放。

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

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

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

    二、static修饰全局变量

             全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。
        全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。两者的区别在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的(在其他源文件中使用时加上extern关键字重新声明即可)。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。 
        static全局变量只初使化一次,防止在其他文件单元中被引用(在其他源文件中是能使用不能重新对该全局变量进行赋值等操作);  

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

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

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

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

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

    三、static修饰函数

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

    展开全文
  • 我们知道,static一般是用来修饰变量和函数的 ...后来发现这里的static修饰局部变量只是改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束. 不加static进入函数...

    我们知道,static一般是用来修饰变量和函数的
    1.修饰局部变量-静态局部变量
    2.修饰全局变量-静态局部变量
    3.修饰函数-静态函数
    今天举一个修饰局部变量的,我一开始以为可以将局部变量变为全局变量使用,但是代码写完发现结果不是我想的那样
    在这里插入图片描述
    在这里插入图片描述
    后来发现这里的static修饰局部变量只是改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束.

    不加static进入函数内部的时候,变量会更新
    在这里插入图片描述
    运行结果如图:
    在这里插入图片描述
    而加上了static之后,下次进入函数内部的时候会记得上次的状态:
    在这里插入图片描述
    运行结果如下:
    在这里插入图片描述
    得到了想要的结果.

    展开全文
  • static修饰局部变量

    千次阅读 2013-05-22 15:23:55
    static修饰局部变量 说明: 实验: 所以我觉得,static修饰局部变量不是调用这个函数时候才进行的初始化,在程序一运行就进行了初始化。
  • static 修饰局部变量

    2016-06-14 10:08:46
    static 修饰局部变量称为静态变量,存储在静态区,存储在静态区的变量,在程序运行时,静态变量的声明除了第一次执行时向内存中加载外,并在内存中保存值,其余再执行到静态变量的声明的地方时直接略过,直接使用...
  • C语言中static的用法(修饰局部变量,修饰全局变量,修饰函数).pdf
  • static不能修饰局部变量理解

    千次阅读 2013-05-15 23:32:35
    在java中,首先,被static修饰,表示是随着jvm加载类的时候就加载了。...理解二:假如可以static修饰局部变量,就表示此变量在所在类被jvm加载的时候就初始化加载了。但是方法和对象相关的,而方法只有在
  • static函数修饰全局变量和局部变量

    千次阅读 2019-04-09 17:59:49
    static int a=1; void fun1(void){ a=2; } void fun2(void){ int a=3; } void fun3(void){ static int a=4; } int main(int argc,char** args){ printf(“%d”,a); fun1( ); prin...
  • 当fianl修饰成员变量的时候一定要初始化,当修饰局部变量的时候,可以先只定义(blank fianl) static表示共享当static修饰成员变量的时候,如果一个方法对该static变量改变了值,那么以后的对象后该变量的值为...
  • java基础-static修饰局部变量

    千次阅读 2020-01-19 11:33:56
    7.现在有如下一段代码 public class Test { public int aMethod() { static int i=0; i++; retu...
  • Java中static为什么不能修饰局部变量?

    万次阅读 2015-09-15 20:03:28
    问这样问题的人显然是学过c/c++的,因为在c/c++中static可以修饰局部变量的 如果你对这个问题百思不得其解,怎么都想不明白,你还是不要想了,因为没有什么为什么。 不能就是不能,人为规定的规则罢了。 如果你非...
  • //static修饰的全局变量和局部变量 int main() { int i = 0; for (i = 0; i {  int num = 1; num++; printf("%d\t", num);//2,2,2,2,2 } system("pause"); return 0; } int main() { int i...
  • 一、全局变量与static全局变量 首先要清楚全局变量本身就是静态存储,加上static肯定也是静态存储。 两者的主要区别在于作用域。 普通的全局变量其作用域为整个源程序,各个源文件之间都可以访问...二、局部变量
  • 一、static修饰全局变量: 当一个进程的全局变量被声明为static之后,它的...二、static修饰局部变量: static局部变量中文名叫静态局部变量。 1)位置:静态局部变量被编译器放在全局存储区.data(注意:不在.bss段
  • java 中 Cannot make a static reference to the non-static 解决方法 今天敲代码的时候遇到了这个问题,大体这个问题可以简化成这样; public class Test1 {public String get(){return "1...
  • static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?  全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态...
  • 在我们刚开始接触接触C语言的时候一定听说过static关键字... 1):static修饰局部变量 2):static修饰全局变量 3):static修饰函数一、static修饰局部变量普通的局部变量是在栈上进行分配的,局部变量所处的函数
  • *******************************概念***************************************************************************************************************************首先得明白全局变量、静态全局变量、局部变量...
  • 人为规定的,记住就好。其实这些变量都之所以叫局部变量,其作用域也只限于声明它的方法体内...关于static的用法:1.static变量 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态st
  • static关键字至少有下列n个作用...(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问; (3)限制函数的作用域,在模块内的static函数只可被这一模块内的其
  • /*静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它*/ int test_function_static() { #...
  • static修饰变量

    千次阅读 2018-04-24 16:04:52
    static 修饰的局部变量和全局变量1.static修饰局部变量:改变了变量的生命周期(整个项目)但是不改变变量的范围(仍然是局部范围)2.static修饰全局变量改变了变量的范围;(不能被为外部源文件引用,即:不能用...
  • Java中final修饰局部变量的问题

    千次阅读 2019-08-15 18:00:26
    Java中final修饰局部变量的问题 修饰数据类型 变化 基本类型 基本类型的值不能发生改变 引用类型 引用类型的地址值不能发生改变,但是,该对象的堆内存的值是可以改变的 所修饰部分为基本数据类型时 ...
  • static的作用 static的作用可以分为两类,在类中的作用和不在类中的...而用static修饰局部变量会延长局部变量的生命周期,在程序运行结束时才会被释放。也就是说static修饰的局部变量不会随着函数体的运行结束被释...
  • static作用(修饰函数、局部变量、全局变量)

    万次阅读 多人点赞 2018-12-09 20:52:50
    C语言:static作用(修饰函数、局部变量、全局变量) 一、 static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。  全局变量本身就是静态存储方式, ...
  • static修饰的成员变量可以被修改吗

    万次阅读 多人点赞 2017-11-23 20:01:08
    那么被static修饰的成员变量可以被修改吗?可以。只要是变量就可以被修改。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java...
  • Static修饰符的基本用法: (1)Static修饰的成员,随着所在类的加载而加载.   当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中...(4)static修饰的成员可以被所有该类的对象访问,也可以被类名直接访问.  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 133,499
精华内容 53,399
关键字:

static可以修饰局部变量吗