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是局部除第一次外不再初始化。


相关文章
|
2月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
159 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
2月前
学习使用auto定义变量的用法
学习使用auto定义变量的用法。
50 10
|
2月前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
148 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
2月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
248 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
7月前
|
存储 安全 编译器
【C++】基础知识讲解(引用、内联、auto,基于范围for循环)
【C++】基础知识讲解(引用、内联、auto,基于范围for循环)
48 1
|
7月前
|
Java
注释之背后:代码的解释者与保护者
注释之背后:代码的解释者与保护者
41 0
|
XML 编解码 API
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
130 0
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
|
前端开发
前端知识学习案例13vs code-添加注释
前端知识学习案例13vs code-添加注释
49 0
前端知识学习案例13vs code-添加注释
小浩编程:static简单举例应用
小浩编程:static简单举例应用
81 0
|
Web App开发 前端开发 iOS开发
小技巧!CSS 整块文本溢出省略特性探究
小技巧!CSS 整块文本溢出省略特性探究
191 0
小技巧!CSS 整块文本溢出省略特性探究