C语言关键字static的绝妙用途

为什么要说static妙,它确实是妙,在软件开发或者单片机开发过程中,大家总以为static就是一个静态变量,在变量类型的前面加上就自动清0了,还有就是加上static关键字的,不管是变量还是关键字,在局部变量中,变量仅限于局部可见,在全局区中,static变量或函数仅限于本文件可见,当然还有一个重要的特性被忽略了。。。。

      就是static修饰的局部变量 它的数值 是上一次函数调用结束之后的数值。正是因为有了这个特性,我们就可以利用zh这个特性完成很多功能。精简总结一下static的特性:

关键字  static
        可以修饰 函数 可以修饰 变量
         它所修饰的内容为静态
   static修饰的局部变量为 静态局部变量
         特点:
         1、生命周期 整个程序 
         2、访问范围 和普通变量是一样的
         3、static修饰的局部变量 它的数值 是上一次函数调用结束之后的数值
         4、static还可以 修饰 全局变量 或者函数
               静态局部变量 在定义的时候没有初始化  系统会给定 0为默认的初始值
         5、如果涉及到多文件操作的时候  用static修饰的全局变量   这个全局 变量只能是在本文件中使用 
              static修饰函数的时候 一样 表示限定使用范围 之恩能够是在本文件中使用
 6、普通的 局部 变量是在栈上面分配 空间的   是系统分配以及 负责释放回收的 
              全局变量 静态局部变量实际上是在  静态区 上分配空间 

我们写个程序验证一下:(仅验证第3个功能)

#include<stdio.h>

void fun();
int main()
{
  fun();
  fun();
  return 0;
}

void fun()
{
   static int a = 0;
   a++ ;
   printf("a:%d\n",a);
}

执行结果:

从执行结果看到,fun()函数在main函数中调用了两次,第一次调用的时候a自加,打印的结果为1

第二次调用fun()函数的时候,a其实就不为0了,而是为1,因此自加,a就变成了2。

时间: 2024-08-26 21:42:11

C语言关键字static的绝妙用途的相关文章

C语言关键字auto与register的深入理解_C 语言

关键字概述很多朋友看到这儿可能会有疑问,往往其它讲C语言的书籍都是从HelloWorld,数据类型开始C语言学习的,为什么我们要从C语言的关键字开始呢?关于这点,我有两点需要说明:本章节面向的读者对象是有一定的C语言基础知识的朋友(至少应该学习过大学里的C语言程序设计等类似的课程)本章节结合了作者多年嵌入式工作.研究.教学经验而作,由计算机底层硬件到上层软件设计融会贯通,中间有大量的深入浅出的示例 在我对C语言进行培训的时候,往往就是从C语言的关键字入手,因为C语言的关键字蕴含了C语言的全部的词

c语言-C语言的static全局变量有什么意义?

问题描述 C语言的static全局变量有什么意义? .h文件中的全局变量用了static修饰,但被其它文件包含后,这个static全局变量还是可以被其它文件访问,那我声明为static有什么意义? 怎样才能让我的头文件在被其它文件包含后其中的全局变量不被这个文件访问到? 解决方案 全局 static,就是其他文件都能访问,尽量减少此类变量 要像不被访问,就别做成public的 解决方案二: 头文件被包含的含义起始很简单,就是机械地将这个头文件插入所包含的源代码的include所在的位置,编译器最

C语言之static辨析

1.概述 static声明的变量在C语言中有两方面的特征: 1).变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值.这一点是它与堆栈变量和堆变量的区别. 2).变量用static告知编译器,自己仅仅在变量的作用范围内可见.这一点是它与全局变量的区别. 2.问题:Static的理解 关于static变量,请选择下面所有说法正确的内容: A.若全局变量仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度: B.若全局变量仅由单个函数访问,则可以

C语言关键字大全(共32个)

这篇文章主要分享下C语言的32个关键字,需要的朋友可以参考下 C语言一共有32个关键字,如下所述: auto :声明自动变量 short :声明短整型变量或函数 int: 声明整型变量或函数 long :声明长整型变量或函数 float:声明浮点型变量或函数 double :声明双精度变量或函数 char :声明字符型变量或函数 struct:声明结构体变量或函数 union:声明共用数据类型 enum :声明枚举类型 typedef:用以给数据类型取别名 const :声明只读变量 unsig

Java基础之关键字static的详解

一.静态变量 被static关键字修饰的成员变量叫做静态变量,前面我们讲到成员变量与局部变量的区别,那么静态变量与成员变量又有哪些不同呢? 1.调用方式 静态变量:类变量,可以直接通过类名调用,也可以通过对象名调用,这个变量属于类 成员变量:实例变量,只能通过对象名调用,这个变量属于对象 2.存储位置 静态变量:存储在方法区中的静态区 成员变量:存储在堆内存 3.生命周期 静态变量:随着类的加载而存在,随着类的消失而消失 成员变量:随着对象的创建而存在,随着对象的消失而消失 4.与对象的相关性

C语言关键字大全(共32个)_C 语言

C语言一共有32个关键字,如下所述: auto :声明自动变量 short :声明短整型变量或函数 int: 声明整型变量或函数 long :声明长整型变量或函数 float:声明浮点型变量或函数 double :声明双精度变量或函数 char :声明字符型变量或函数 struct:声明结构体变量或函数 union:声明共用数据类型 enum :声明枚举类型 typedef:用以给数据类型取别名 const :声明只读变量 unsigned:声明无符号类型变量或函数 signed:声明有符号类型

C++关键字static,const,volatile详解

static static修饰局部变量           static修饰局部变量用于修改变量的存储位置,从自动变量修改为静态变量(在静态区开辟空间,不在栈上开辟),但变量的链接属性和作用域不受影响.static修饰局部变量时该变量在程序执行之前创建,并在程序的整个执行空间一直存在,即使出了作用域也只是被隐藏并不销毁该变量.请看下面的两段代码             代码一:没有static修饰的局部变量           int main() {  int i=0;  for(i=0;i<

关于C/C++中static关键字的作用总结_C 语言

1.先来介绍它的第一条也是最重要的一条:隐藏.(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.举例来说明.同时编译两个源文件,一个是a.c,另一个是main.c. 复制代码 代码如下: //a.cchar a = 'A';               // global variablevoid msg(){     printf("Hello\n");} 复制代码 代码如下: //main.c int main

关于C++中的static关键字的总结_C 语言

1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量.我们先举一个静态全局变量的例子,如下: 复制代码 代码如下: //Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){  n=20;  cout<<n<<endl;  fn();} void fn(){ n++;  cout<<n<