C语言第四课--------要我们一起快乐的学习吧1

简介: C语言第四课--------要我们一起快乐的学习吧

紧接上一篇博客,在上一篇博客中我简单的解释了那些关键字的意思

下面我们插播一些小知识

插播一:


内存的大概划分

插播二:

在VScode中 ,每个.c文件的运行都是单独的经过编译器处理的

关键字

auto   break   case   char   const   continue   default   do   double else   enum  

extern float   for   goto   if   int   long   register     return   short   signed              

sizeof   static struct   switch   typedef union   unsigned   void   volatile   while    

auto(使局部变量自动创建与自动销毁)

代码:

#include <stdio.h>
int main()
{
  auto int a = 0;
  int b = 0;
  return 0; 
}

其实在定义局部变量的时候我们只是省略了auto

关键字 typedef

代码:

#include <stdio.h>
typedef unsigned int uint;
typedef int INT;
int main()
{
  unsigned int a = 0;
  uint b = 2;
  INT c = 3;
  printf("a=%d b=%d c=%d", a, b, c);
  return 0;
}

结果:

可以看出typedef(类型重定义),太长的数据类型我们就需要简化

uint   INT都是别名

关键字static(静态的)

有三种用法 修饰局部变量   修饰全局变量  修饰函数

下面我

来简单介绍

static 修饰局部变量

代码:

#include <stdio.h>
//没有static修饰
int Add_1()
{
  int i = 0;
  i += 2;
  return i;
}
//有static修饰
int Add_2()
{
  static int i = 0;
  i += 2;
  return i;
}
int main()
{
  int a = 0;
  int b = 0;
  while (a < 5)
  {
    int c = 0;
    c = Add_1();
    printf("c=%d\n", c);  
    a++;
  }
  while (b < 5)
  {
    int d = 0;
    d = Add_2();
    printf("d=%d\n", d);
    b++;
  }
  return 0;
}

结果:

static int i = 0的创建是进入函数就创建好了,不是运行它才创建,往后再调用就会继续使用之前的i.不会创建新的i

我们可以查看反汇编

两者不同

查看反汇编的方法

调试到如图中的为位置

然后右击鼠标

static修饰局部变量总结:

局部变量在没有static修饰会在出函数范围就自动销毁,有static修饰的局部变量,在第一次运行函数就创建了,出函数也不会销毁,就无需再次创建,可以理解为生命周期延长了,但是作用域不变


本质:在没有static修饰的局部变量就会存放在栈区,而被static修饰的局部变量就会存放在静态区,静态区的变量的生命周期和全局变量是一样的

static修饰全局变量

第一种

代码1:

#include <stdio.h>
int a = 12;
int g_val()
{
  printf("a_val():%d\n", a);
}
int main()
{
  printf("a=%d\n", a);
  g_val();
  return 0;
}

结果:

第二种

可以看出全局变量有外部链接属性,这种属性决定了全局变量可以在多个文件使用

extern 声明外部符

当我们利用static修饰全局变量时

原因是啥呢?

其实被static修饰的全局变量会把全局变量的外部链接属性变成内部链接属性(就是全局变量不能跨文件使用,只能在自己的.c文件使用),注意存储的地方还是静态区,加了static修饰的全局变量只是告诉编译器  "这个全局变量你只能在自己的,c文件使用,,不能乱跑"


可以理解为改变了作用域


相关文章
|
3月前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
21 0
|
5月前
|
编译器 C语言
C语言函数的学习
掌握函数的使用是学习C语言的关键一环,理解和应用这些基本的函数概念将使你能够更有效地利用C语言的强大功能。
28 0
|
7月前
|
存储 程序员 Go
|
7月前
|
存储 编译器 C语言
c语言学习历程【1】
c语言学习历程【1】
88 1
|
7月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
54 1
|
7月前
|
C语言
|
7月前
|
C语言
|
7月前
|
C语言
|
7月前
|
C语言
|
7月前
|
C语言