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


相关文章
|
3月前
|
存储 C语言
C语言学习记录——复习数据存储类别(auto、register、static、extern)
C语言学习记录——复习数据存储类别(auto、register、static、extern)
29 1
|
4月前
|
Java
注释之背后:代码的解释者与保护者
注释之背后:代码的解释者与保护者
30 0
|
XML 编解码 API
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
102 0
什么是 SVG?本项目简单分享动画入门的相关知识,并附有相关代码演示,同时文档对SVG等相关内容有比较详细的叙述,如vector标签中属性所代表的意义解释、path标签所支持的指令解释等等。
小浩编程:static简单举例应用
小浩编程:static简单举例应用
65 0
几种简短的数据类型的介绍(主要介绍void)
几种简短的数据类型的介绍(主要介绍void)
96 0
|
Web App开发 前端开发 iOS开发
小技巧!CSS 整块文本溢出省略特性探究
小技巧!CSS 整块文本溢出省略特性探究
173 0
小技巧!CSS 整块文本溢出省略特性探究
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(上)
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(上)
157 0
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(上)
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(下)
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(下)
134 0
妙用 Java 8 中的 Function 接口,消灭 if...else(非常新颖的写法)(下)
|
Python
python中.format()槽的顺序改变(速看,带图解释)
python中.format()槽的顺序改变(速看,带图解释)
234 0
python中.format()槽的顺序改变(速看,带图解释)
Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)
Python编程语言学习:判断变量是否为NONE或False的几种常见写法(if not用法教程)