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`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
97 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
1月前
学习使用auto定义变量的用法
学习使用auto定义变量的用法。
45 10
|
1月前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
165 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
1月前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
97 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
5月前
|
存储 C语言
C语言学习记录——复习数据存储类别(auto、register、static、extern)
C语言学习记录——复习数据存储类别(auto、register、static、extern)
41 1
|
6月前
|
Java 程序员 C#
C# 介绍、应用领域、入门、语法、输出和注释详解
C#(发音为“C-Sharp”)是一种由 Microsoft 创建的面向对象的编程语言,运行在 .NET Framework 上。源于 C 家族,与流行的语言如 C++ 和 Java 相近。首个版本发布于 2002 年,而最新版本,C# 12,于 2023 年 11 月发布
140 0
|
6月前
|
Java
注释之背后:代码的解释者与保护者
注释之背后:代码的解释者与保护者
38 0
|
XML 编解码 API
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
123 0
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
|
存储 安全 编译器
【C++入门必备知识:|引用| +|auto关键字| + |范围for|】
引用不是新定义一个变量,而是给已经存在的变量取别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存区间。
125 0
|
前端开发
前端知识学习案例13vs code-添加注释
前端知识学习案例13vs code-添加注释
44 0
前端知识学习案例13vs code-添加注释