static和auto的用法,文字太枯燥,还是代码解释比较好,你觉得呢?

简介: static和auto的用法,文字太枯燥,还是代码解释比较好,你觉得呢?

static的第一种用法:定义为静态变量

何为静态变量?存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。就是只进行一次初始化。不理解?看代码!


代码见真知:

#include<stdio.h>
int main()
{
  void fun();   //定义一个空函数
  for(int i=0;i<3;i++)
  {
    fun();    //调用函数
  }
  return 0;
} 
void fun()  
{
  int i=0; 
  static int static_i=0;
  printf("没有加static的结果为:%d\n",i);
  printf("加了static的结果为:%d\n",static_i); 
  i++;    //没有加static,i最终都会被初始化为0
  static_i++;  //加了static,只初始化一次,后面继续累加
  printf("\n");
}


运行结果:

由结果可以看出有static的在持续累加,除了第一次没有再初始化。


static的第二种用法:有理说不清,直接代码见真知

#include<stdio.h>
int main()
{
  int i,sum;
  sum=2;
  for(i=0;i<3;i++)
  {
        //外置模块
    printf("外置模块为:%d\n",sum);
    sum++;
        //内置模块
    {
      static int sum=1;  //局部重新定义sum的初始值
      printf("内置模块为:%d\n",sum);
      sum++;
    }
    printf("\n");
  }
  return 0;
} 


运行结果:

由结果可见:外置模块和内置模块是互不影响的,这就是static的第二种用法,保持局部一部分稳定,不会随外部的变化而变化。


auto的用法:直接代码见真知

#include<stdio.h>
int main()
{
  int i,sum;
  sum=2;
  for(i=0;i<3;i++)
  {
        //外部
    printf("外置模块为:%d\n",sum);
    sum++;
        //局部
    {
      auto int sum=1; 
      printf("内置模块为:%d\n",sum);
      sum++;
    }
    printf("\n");
  }
  return 0;
} 


代码看不懂?结合运行结果就懂了:

由结果显而易见:外置模块持续累加,内置模块全部为1,与static的第二种用法相比较,auto局部不断进行初始化 ,而static是局部除第一次外不再初始化。


相关文章
|
1月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
116 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
1月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
191 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
1月前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
121 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
JavaScript 前端开发
js正则表达式的作用及使用方法
js正则表达式的作用及使用方法
105 1
|
XML 编解码 API
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
126 0
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
|
前端开发
前端知识学习案例13vs code-添加注释
前端知识学习案例13vs code-添加注释
47 0
前端知识学习案例13vs code-添加注释
小浩编程:static简单举例应用
小浩编程:static简单举例应用
73 0
几种简短的数据类型的介绍(主要介绍void)
几种简短的数据类型的介绍(主要介绍void)
105 0
|
存储 关系型数据库 MySQL
INT类型知多少
整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用。
224 0
Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)
Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)