【小杨带你玩转C语言】(入门篇)初识C语言(下)

news/2024/11/9 0:04:18/

在这里插入图片描述

本章目录

每篇前言

1.导语

2.目标

3.知识点

一,常见关键字
      1,认识关键字
      2,关键字分类
          2.1,数据类型关键字
            2.1.1,基本数据类型关键字
            2.1.2,类型修饰关键字
            2.1.3,复杂类型关键字
            2.1.4,存储级别关键字
          2.2,流程控制关键字
            2.2.1,跳转结构
            2.2.2,分支结构
            2.2.3,循环结构
      3,详解关键字之static
          3.1,static修饰局部变量
          3.2,static修饰全局变量
          3.3,static修饰函数
      4,补充关键字之register
二,define定义常量和宏
      1,define定义常量
      2,define定义宏
三,指针
      1,内存
      2,变量地址
      3,指针变量
      4,指针的使用
      5,指针的大小
四,结构体
      1,认识结构体
      2,初始化结构体
      3,输出结构体数据
      4,结构体的综合使用

4.结语


每篇前言

博客主页:小杨爱编程☆

作者简介:2022年博客萌新

作者专栏:小杨带你玩转C语言

作者格言:有志者立长志,无志者常立志!

作者请求:由于博主水平有限,难免会有错误和不准之处,希望各位小伙伴能够在留言区批评斧正。
在这里插入图片描述


导语

本篇博客主要向各位小伙伴们继续介绍C语言要学习的后续内容,加深对C语言的了解。希望大家能够通过阅读这篇博客,受益良多!


目标

基本了解C语言的基础知识,对C语言有一个大概的认识
每个知识点就是简单认识,不做详细讲解,后期博客会依次更新。


知识点

一,常见关键字

1,认识关键字

由ANSI标准定义的C语言关键字共32个:

auto double int struct break else long  switch

case enum register typedef char  extern return union

constant float short unsigned continue for signed void

default goto sizeof volatile do if while static

2,关键词分类

根据关键词的作用,可以将关键字分成数据类型关键词和流程类型关键词。

2.1,数据类型关键词
2.1.1,基本数据类型关键字(5个)
关键词关键词的解析
char字符型类型数据
int整型数据类型
float单精度浮点类型
double双精度浮点类型
void声明函数无返回值或者无参数,以及声明无类型指针
2.1.2,类型修饰关键字(4个)
关键字关键字的解析
short修饰int,短整型数据类型,可省略int
long修饰int,长整型数据类型,可省略int
signed修饰有符号的整型数据类型
unsigned修饰无有符号的整型数据类型
2.1.3,复杂类型关键字(5个)
关键字关键字的解析
struct结构体声明
union共用体声明
enum枚举声明
typedef类型重命名
sizeof得到特定数据变量和数据类型的大小
2.1.4,存储级别关键字(6个)
关键字关键字的解析
auto自动变量,通常在栈中使用
static静态变量,修饰局部变量,全局变量,函数
register寄存器变量,建议将变量,函数存储在寄存器中
extern声明外部符号,可理解为引用外部对象
constant定义常量,它限定一个变量不允许被改变,产生静态作用
volatile提醒编译器它后面所定义的变量随时有可能改变

由此返回目录

2.2,流程控制关键字
2.2.1,跳转结构(4个)
关键字关键字的解析
return用于函数体中,返回特定值
continue结束当前循环,开始下一轮循环
break跳出循环和switch语句
goto无条件跳转
2.2.2,分支结构(5个)
关键字关键字的解析
if条件语句
else条件语句的否定分支(与if 连用)
switch选择语句(多重分支语句)
case多重分支语句的选择口(与switch 连用)
default多重分支语句的其他选择口(用于switch语句中)
2.2.3,循环结构(3个)
关键字关键字的解析
forfor循环结构,格式:for(初始变量;循环条件;循环变量的改变)
whilewhile循环结构,格式:while(循环条件){循环体}
dodo …while循环结构,格式:do{循环体}while(循环条件);

由此返回目录

3,详解关键字之static

  • static 修饰局部变量
  • static 修饰全局变量
  • static 修饰函数
3.1,static修饰局部变量

  实例:

#include <stdio.h>
void test()
{int i = 0;i++;printf("%d ", i);
}
int main()
{int i = 0;for (i = 0; i < 10; i++){test();}return 0;
}

  输出结果:

在这里插入图片描述


static修饰后:

  实例:

#include <stdio.h>
void test()
{static int i = 0;//static修饰局部变量i++;printf("%d ", i);
}
int main()
{int i = 0;for (i = 0; i < 10; i++){test();}return 0;
}

  输出结果:

在这里插入图片描述


  综上分析:static修饰局部变量时,实际改变的是局部变量的存储位置,本来局部变量是应该放在栈区位置的,但是被static修饰后则被放在静态区了,从而导致,局部变量变成了静态的局部变量,出了作用域依然存在,生命周期并未结束,下次进入函数依然存在。


讲到这里,来简单介绍一下简化后的内存:

在这里插入图片描述

注:静态区的生命周期和程序的生命周期是一致的,程序结束,静态区的数据生命周期也就结束。


3.2,static修饰全局变量

  实例:

在这里插入图片描述

  输出结果:

在这里插入图片描述


static修饰全局变量后:

  实例:

在这里插入图片描述

  输出结果:

在这里插入图片描述


综上分析:一个全局变量具有外部链接属性,但被static修饰后,全局变量的外部链接属性就变成了内部链接属性,只能在所在的源文件内部使用,不能在其他文件内使用。


3.3,static修饰函数

  实例:

在这里插入图片描述

  输出结果:

在这里插入图片描述


static修饰函数后

  实例:

在这里插入图片描述

  输出结果:

在这里插入图片描述

  综上分析:一个函数具有外部链接属性,但被static修饰后,全局变量的外部链接属性就变成了内部链接属性,只能在所在的源文件内部使用,不能在其他文件内使用。(与static修饰全局变量相类似) 。


4,补充关键字之register

register:寄存器关键字,建议将变量,函数存储在寄存器中

电脑上的存储设备示意图:

在这里插入图片描述

  • 寄存器是集成到CPU上的

  • 早期:CPU数据从内存上读取,CPU处理数据

  • 现在:1.CPU数据处理过快,内存读写速度跟不上,组成CPU数据闲置
    2.CPU数据从寄存器中读取数据,避免CPU数据闲置


由此返回目录

二,define定义常量和宏

1,define定义常量

格式:#define + 标识符 + 常量

  实例:

#include<stdio.h>
//定义标识符常量
#define MAX 100
int main()
{printf("%d", MAX);return 0;
}

  输出结果:

在这里插入图片描述


2,define定义宏

  实例:

#include<stdio.h>
//定义宏
#define ADD(x,y) ((x)+(y))
int main()
{int sum = ADD(2, 3);printf("%d", sum);return 0;
}

  输出结果:

在这里插入图片描述

  分析:

在这里插入图片描述


由此返回目录

三,指针

1,内存

1,内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

2,为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节

3,为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址

在这里插入图片描述


2,变量地址

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。

  取出单元地址:

#include <stdio.h>
int main()
{int num = 10;&num;//取出num的地址printf("%p\n", &num);//打印地址,%p是以地址的形式打印return 0;
}

  输出结果:

在这里插入图片描述

  注意:这里num是4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)。


3,指针变量

指针变量:用来存放指针(地址)的变量

  示例:

#include <stdio.h>
int main()
{int num = 66;int *p; //p为int型指针变量p= &num;return 0; 
}

4,指针的使用

#include <stdio.h>
int main()
{int num = 10;int* p = &num;*p = 20;printf("%d",num);return 0;
}

  输出结果:

在这里插入图片描述


5,指针的大小

指针变量的大小取决于地址的大小

32位平台(X86)下地址是32个bit位(即4个字节)

64位平台X64)下地址是64个bit位(即8个字节)

  示例:

#include<stdio.h>
int main()
{printf("%d\n", sizeof(char*));printf("%d\n", sizeof(short*));printf("%d\n", sizeof(int*));printf("%d\n", sizeof(double*));return 0;
}

  输出结果:

32位平台输出

在这里插入图片描述

64位平台输出

在这里插入图片描述

注意:不管是什么类型的指针,都是在创建指针变量,指针变量的大小取决于地址的大小。


由此返回目录

四,结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

比如描述一名学生,学生包含: 名字+年龄+性别+学号 这几项信息。

这里只能使用结构体来描述了。

1,认识结构体

  示例:

struct Stu
{char name[20];//名字int age;      //年龄char sex[5];  //性别char id[15]; //学号
};

2,初始化结构体

  示例:

//打印结构体信息
struct Stu s = {"张三", 20, "男", "20180101"};

3,输出结构体数据

  • .为结构成员访问操作符:结构体变量.结构体成员
  • ->操作符:结构体指针->结构体成员

  示例:

//.为结构成员访问操作符
printf("name = %s age = %d sex = %s id = %s\n", s.name, s.age, s.sex, s.id);
//->操作符
struct Stu *ps = &s;
printf("name = %s age = %d sex = %s id = %s\n", ps->name, ps->age, ps->sex, ps- >id);

4,结构体的综合使用

  示例:

//学生
struct Stu
{//成员char name[20];int age;char sex[10];char tele[12];
};void print(struct Stu* ps)
{printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);//->//结构体指针变量->成员名printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->tele);
}
#include<stdio.h>
int main()
{struct Stu s = {"zhangsan", 20, "nan", "15596668862"};//结构体对象.成员名printf("%s %d %s %s\n", s.name, s.age, s.sex, s.tele);print(&s);return 0;
}

  输出结果:

在这里插入图片描述


结语

各位小伙伴们,(入门篇)初识C语言(下)就将C语言后续要学的内容介绍完了,小伙伴们再看后,应该对C语言有了大致的了解了吧!!!下面我将对这些知识点进行逐一详细讲解,敬请期待!

如果各位小伙伴们感觉写的不错,或者阅读后有些许收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(✌关注,✌点赞,✌评论),多多支持一下!!
小伙伴们,切记!这些示例代码一定要记得自己实际操作一下,这样才能加深对这些知识的理解!

最后,感谢每一位小伙伴的阅读,让我们一起努力,一起加油,一起进步!

在这里插入图片描述

为了小伙伴能够有更好的阅读体验,在此附上前两篇博客链接:
【小杨带你玩转C语言】(入门篇)初识C语言(上)
【小杨带你玩转C语言】(入门篇)初识C语言(中)


http://www.ppmy.cn/news/35929.html

相关文章

利用Rust与Flutter开发一款小工具

1.起因 起因是年前看到了一篇Rust iOS & Android&#xff5c;未入门也能用来造轮子&#xff1f;的文章&#xff0c;作者使用Rust做了个实时查看埋点的工具。其中作者的一段话给了我启发&#xff1a; 无论是 LookinServer 、 Flipper 等 Debug 利器&#xff0c;还是 Flutt…

【深度强化学习】(5) DDPG 模型解析,附Pytorch完整代码

大家好&#xff0c;今天和各位分享一下深度确定性策略梯度算法 (Deterministic Policy Gradient&#xff0c;DDPG)。并基于 OpenAI 的 gym 环境完成一个小游戏。完整代码在我的 GitHub 中获得&#xff1a; https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Mod…

Python是不是被严重高估了?

Python起源一种shell的脚本语言 &#xff0c;而现在已经发展成最通用的语言之一了&#xff0c;TIOBE指数的数据显示&#xff0c;Python是目前世界上最受欢迎的编程语言。 Python之所以这么受欢迎有很多原因。从Web开发到物联网编程再到AI等各个方面都能用到它。另外Python代码…

解析vue中的process.env

一、介绍 1、process process是 nodejs 下的一个全局变量&#xff0c;它存储着 nodejs 中进程有关的信息。 2、process.env env 是 environment 的简称&#xff0c;process.env属性返回一个包含用户环境的对象。 3、dotenv Dotenv 是一个零依赖的模块&#xff0c;它能将环境变…

【Nginx】Nginx 常用的基础配置

文章目录一、基础配置二、隐藏 Nginx 版本信息三、禁止ip直接访问80端口四、启动 web 服务 (vue 项目为例)五、PC端和移动端使用不同的项目文件映射六、一个web服务&#xff0c;配置多个项目 (location 匹配路由区别)七、配置负载均衡八、SSL 配置 HTTPS一、基础配置 user …

uniapp - APP云打包、蒲公英平台发布APP的步骤

一、uniapp 云打包 1、注册 dcloud 开发者 首先需要注册一个 dcloud 开发者的账号 dcloud开发者中心&#xff1a;登录 (dcloud.net.cn) 根据流程注册即可。 2、云打包&#xff08;已安卓为例&#xff09; 项目创建完成后&#xff0c;查看 dcloud 开发者中心&#xff0c;看是否…

kaggle注册以及数据集下载全流程

kaggle官网&#xff1a;Kaggle Competitions 目录 一、注册 二、数据集如何下载&#xff1a; 1.第一步&#xff0c;登录进入kaggle网站&#xff0c;导航栏search里搜索自己要下载的数据集 2.第二步&#xff0c;在网站右上角个人中心头像那里点击进去account ​3.第三步&a…

突然裁员1/3,原因竟是算法判定员工“不敬业且效率低”?

今天&#xff0c;一个“AI裁员”的话题上了知乎热搜&#xff1a; 据统计&#xff0c;这家名叫 Xsolla 的俄罗斯公司已经用AI裁掉了大约三分之一的员工。 对于这种充满争议的反常举动&#xff0c;一些知乎er已经开始了合理“阴谋论”&#xff1a; “这算个P的AI&#xff0c;无非…