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文件使用,,不能乱跑"


可以理解为改变了作用域


相关文章
|
16小时前
|
存储 编译器 C语言
初识C语言——详细入门(系统性学习day4)
初识C语言——详细入门(系统性学习day4)
|
16小时前
|
编译器 程序员 开发工具
c语言从入门到实战——在系统学习C语言之前所需要了解的知识
C语言是一种通用的、过程式的计算机编程语言,支持结构化编程、词汇变量作用域和递归等功能,其设计提供了低级别的存取权限,并且要求程序员管理所有的内存细节。C语言的基本构成包括数据类型(如整型、浮点型、字符型等)、运算符(如算术运算符、关系运算符、逻辑运算符等)、控制结构(如顺序结构、选择结构、循环结构等)以及函数等。此外,C语言还提供了指针的概念,这是其他许多编程语言所不具备的。指针是一个变量,其值为另一个变量的地址,通过指针可以间接访问和操作内存中的数据。C语言也支持数组、结构体、联合体等复合数据类型,以及文件操作、动态内存分配等高级功能。
54 0
|
16小时前
|
存储 C语言
通俗易懂的学习C语言中输入一组数并找出其最大值
通俗易懂的学习C语言中输入一组数并找出其最大值
|
15小时前
|
人工智能 测试技术 C语言
C语言学习
C语言学习
13 1
|
16小时前
|
机器学习/深度学习 人工智能 Java
学习Python语言好还是C语言好
学习Python语言好还是C语言好
22 0
|
16小时前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
83 0
|
16小时前
|
C语言
二次学习C语言补缺(day1)
二次学习C语言补缺(day1)
18 2
|
16小时前
|
编译器 C语言
C语言指针学习
C语言指针学习
19 0
|
16小时前
|
存储 编译器 程序员
C语言学习大纲
C语言学习大纲
|
16小时前
|
机器学习/深度学习 算法 C语言
C语言学习——打印各种图形
C语言学习——打印各种图形
59 0
C语言学习——打印各种图形