【C语言__基础概念__复习篇8】

news2024/11/26 10:38:48

目录

前言

一、C语言是什么

二、C语言的发展历史

三、编译器的选择

        3.1 编译和链接

        3.2 编译器的对比

        3.3 VS如何使用

四、main函数

五、关键字

六、字符和ASCII编码

七、字符串和\0

八、转义字符

九、注释

十、数据类型

        10.1 数据类型的介绍

        10.2 数据类型大小的计算

        10.3 signed 和 unsigned

        10.4 数据类型的取值范围

十一、变量

        11.1 变量的创建

        11.2 变量的分类


前言

本篇主要讨论以下问题:

1. C语言是什么

2. C语言的发展历史是怎样的

3. 源代码是如何转化成二进制指令的

4. 常见的编译器是哪几种,常见的集成开发环境又是哪些

5. 如何使用VS来写C语言代码

6. 什么是main函数,它有哪些特点

7. 关键字是什么,常见的32个关键字有哪些

8. 什么是字符,怎样写一个字符常量,ASCII编码是什么,常用的ASCII码值有哪些

10. 什么是字符串(即,怎样表示一个字符串),\0在字符串中起什么作用

11. 什么是转移字符,常见的转移字符有哪些,它们分别在什么场景下使用

12. 注释分为哪两种,两种注释的优缺点分别是什么

13. C语言中的数据类型分为哪两大类,每个大类别里面又包含哪几种

14. 对于sizeof关键字我们应该有哪些认识

15. signed 和 unsigned 它们是用于修饰什么的,它们表达的含义又是什么

16. 数据类型的取值范围在哪个文件里可以看到

17. 如何创建一个变量,变量又分为哪两类

一、C语言是什么

1. 人与人交流使用自然语言,人与计算机交流使用计算机语言,C语言就是计算机语言之一。我们可以使用计算机语言编写程序,给计算机下达指令,从而让计算机按照我们的预期去工作。

二、C语言的发展历史

1. C语言最初是作为 Unix 操作系统的开发工具而被发明的。

2. 1969年贝尔实验室的汤姆森与丹尼斯·里奇一起开发了Unix操作系统 (常见的操作系统:Windows、Linux、MacOs),Unix操作系统是用汇编语言写的,为了方便移植,汤普森发明了B语言 ,但B语言不够好,所以3年后1972年丹尼斯·里奇和布莱恩·柯林汉在B语言的基础上发明了C语言。在C语言使用成熟后,1973年Unix操作系统用C语言进行了重写,此后C语言被更加广泛地使用和流传,尤其是在各种操作系统和系统软件的开发上,后来在1988年,美国国家标准协会ANSI,正式将C语言标准化,发展直至今日。

三、编译器的选择

1. C语言代码需要编译器才能够运行起来。

3.1 编译和链接

1. 源代码转化成二进制指令的必经之路:编译和链接。

2. C语言是一门编译型的计算机语言,C语言源代码都是文本文件,文本文件本身无法被执行,必须经过编译器的编译和连接器的链接,生成二进制的可执行文件,可执行文件才能被执行。

3.2 编译器的对比

1. 常见的编译器:msvc、clang、gcc (编译器需要通过命令行的形式去编译代码)

2. 集成开发环境(IDE):VS2022、XCode、DevC++ (集成开发环境用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、链接器、调试器等工具,集成了代码编写的功能,编译功能,链接功能,调试功能等)

- VS2022 集成了 msvc 编译器 (安装包大,安装简单,无需多余配置,使用方便)

- XCode 集成了 Clang 编译器 (只有在苹果电脑上才能用)

- DevC++ 集成了 gcc 编译器 (小巧但工具过于简单,对于代码风格养成不好,一些竞赛使用)

3. 补充:VSCode 是一个编辑器(用来写代码的),只不过非常强大,可以安装各种插件来搭建C/C++的开发环境 (前端开发用得多)

3.3 VS如何使用

1. 在VS上写代码:

    ① 创建新项目→空项目→项目名称、位置→点击创建

    ② 右键单机[源文件]→添加新建项→[C++文件]→定义文件名称→点击添加

    ③ 按照C语言语法写代码

2. 补充1:项目名称最好有意义,不要使用中文、特殊字符

    补充2:① 路径中不要包括空格,特殊字符,中文字符

                 ② 代码的位置,要自己找一个熟悉的路径维护

(不使用中文的原因是因为,软件是外国开发的,对中文字符的支持不太好,"一个人想写bug谁都拦不住")

3. 在C语言中:(.c)为后缀的文件是源文件,(.h)为后缀的文件是头文件,(.cpp)为后缀的文件是C++的源文件 (C++包含绝大部分C语言语法,C语言极少数的语法并不包含在内,如下图)

4. (编译 -- 链接 -- 运行)        快捷键ctrl+F5

 

四、main函数

1. 每一个C语言项目不管有多少行代码,都是从main函数的第一行开始执行的,可以理解为main函数是程序的入口,main函数又被称为主函数。

- main函数是程序的入口

- main函数有且仅有一个 (即使一个项目中有多个(.c)文件,但main函数只能有一个,因为程序的入口只能有一个)

2. main函数的壳子:

    int main()

    {

            return 0;

    }

3. 补充1:程序中的符号都应该采用英文的。

    补充2:在C语言中,正常返回返回0,异常返回返回非0。

五、关键字

1. 关键字就是有特殊意义的名称,程序员在创建标识符时名称不能与关键字相同,程序员不能自己创建关键字,只能创建标识符。(标识符≠关键字,标识符由字母、数字、下划线构成,但标识符的开头不能是数字)

2. C语言中常见的32个关键字:

  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 

3. 在C99标准中加入了_Bool等关键字。

4. C语言关键字介绍:C 关键词 - cppreference.com

六、字符和ASCII编码

1. 在键盘上可敲出的各种符号都被称为字符,C语言中的字符常量是用单引号引起来的,如:'a'、'@'、'!' 等。

2. 数据在内存中是以二进制的形式存储的,因为计算机只能识别二进制指令,为了存放字符,美国国家标准协会ANSI出台了一个标准ASCII编码表,C语言中每个字符都有着自己的编码,在存放一个字符在内存中时,直接存放字符对应的ASCII编码值即可。

3. 传统的ASCII编码表上有128个字符,十进制编号:0~127

4. 所需掌握的ASCII码值:

    ① A~Z   65~90

    ② a~z   97~122 (大小写字母ASCII码值差32)

    ③ 0~9   48~57

    ④ \n      10

    ⑤ 0~31的ASCII码值对应的32个字符,是不可打印字符,无法打印在屏幕上观察

5. 用%c的形式打印字符,参数部分写ASCII码值的效果是一样的。例如:

    printf("%c", 'a'); == printf("%c", 97);

七、字符串和\0

1. 使用双引号括起来的一串字符被称为字符串,如"hello world",字符串的打印格式可以用%s来指定。

2. 字符串特殊的知识点:每个字符串的末尾都隐藏着一个\0字符,这个\0是字符串的结束标志,在使用printf打印字符串或用strlen计算字符串长度时函数遇到\0就自动停止工作了。

举例:① printf("abc\0abc");在屏幕上打印的结果是abc

           ② char arr1[] = "abc";和 char arr2[] = {'a','b','c'};用%s打印出来的结果不同造成的                   原因就是因为\0所在的位置导致的。

八、转义字符

1. 转义字符就是转变了原来意义的字符。

2. 常见的普通转义字符:

    ① \? :在书写连续多个问号时,为了防止它们被解析成三字母词,通常会在?前加反斜杠

    ② \'  :在打印字符单引号时,可防止单引号与字符常量表示形式的单引号相匹配

    ③ \" :在字符串中含双引号时,可防止双引号与字符串表示形式的双引号相匹配

    ④ \\ :为了使反斜杠只是反斜杠的意思,而不被编译器误认为与后面的字符配对表示一个                 转移字符,通常在输出路径时常会用到,例如:printf("c:\\test\\test.c");

3. 特殊转移字符:(可以理解为字符的8进制或16进制表示形式)

    ① \ddd:ddd表示1~3个八进制数字,如'\130',表示字符X,printf("%c", '\130');//打印X

    ② \xdd:dd表示2个十六进制数字,如'\x30',表示字符0

    补充:\0:null字符,代表没有内容,ASCII码值是0,它也是\ddd的一种而已。

九、注释

1. 注释是对代码的说明,可以帮助我们更好的理解代码,注意不要注释过度。

2. 注释的两种表示形式:

    ① /**/:这种注释可以插在行内,int fopen(char* s /* file name */, int mode);

        优点:方便一次注释多行。

        缺点:不支持嵌套注释,因为/* 开始注释后,遇到第⼀个 */ 就认为注释结束了。

    ② //:双斜杠到⾏尾都属于注释

        优点:没有嵌套注释的概念

        缺点:不太方便一次注释多行 (不过开发环境提供了相关的快捷键)

3. 注意1:不管是哪⼀种注释,都不能放在双引号⾥⾯,因为双引号⾥⾯的注释符号,会成为字符串的⼀部分,解释为普通符号,失去注释作⽤。

    注意2:编译时,注释会被替换成⼀个空格,所以 min/* 这⾥是注释*/Value 会变成

min Value ,⽽不是 minValue,不要在标识符内部写注释!。

十、数据类型

10.1 数据类型的介绍

1. C语言中规定了使⽤整型类型来描述整数,使⽤字符类型来描述字符,使⽤浮点型类型来描述⼩数,编译器只有知道了数据的类型,才知道怎么操作数据。

2. 内置类型:

    ① 字符型:char、[signed] char、unsigned char

    ② 整型:短整型:short [int]、[signed] short [int]、unsigned short [int]

                  整型:int、[signed] int、unsigned int

                  长整型:long [int]、[signed] long [int]、unsigned long [int]

                  更长整型(C99):long long [int]、[signed] long long [int]、unsigned long long [int]

     ③ 浮点型:float、double、long double

     ④ 布尔类型:在 C99 中引⼊了布尔类型 ,专⻔表⽰真假。

                           布尔类型的使⽤得包含头⽂件<stdbool.h>

                           布尔类型变量的取值是:true或者false

        (补充:<stdbool.h>中含#define bool _Boll、#define false 0、#define true 1)

           代码举例:bool flag = true,if(flag) printf("hehe");

 

10.2 数据类型大小的计算

1. sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算sizeof操作符数的类型⻓度的,单位是字节。

2. sizeof 操作符的操作数可以是类型,也可是变量或者表达式。

3. sizeof(类型)、sizeof 表达式

4. sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的,但如果是类型时一定不能省。

5. sizeof 后边的表达式是不真实参与运算的,表达式的类型由赋值操作符左边的类型决定。(原因:sizeof 在代码进⾏编译的时候,就根据表达式的类型确定了,⽽表达式的执⾏却要在 程序运⾏期间才能执⾏,在编译期间已经将sizeof处理掉了,所以在运⾏期间就不会执⾏表达式了。)

10.3 signed 和 unsigned

1. C语⾔使⽤ signed 和 unsigned 关键字修饰字符型和整型类型的。

2. signed 关键字,表⽰⼀个类型带有正负号,包含负值。

3. unsigned 关键字,表⽰该类型不带有正负号,只能表⽰零和正整数。

4. 对于有符号数,最高位为符号位(0正,1负)。

5. 整数变量声明为 unsigned 的好处是,同样⻓度的内存能够表⽰的最⼤整数值,增⼤了⼀倍。 ⽐如,16位的 signed short int 的取值范围是:-32768~32767,最⼤是32767;⽽ unsigned short int 的取值范围是:0~65535,最⼤值增⼤到了65,535。

6. C语言规定signed int == int;而char可能表示signed int 也可能表示unsigned int 这取决于编译器,所以当不确定char在当前环境中到底表示的是什么时,自己写代码时要写清楚。

10.4 数据类型的取值范围

1. 每⼀种数据类型有⾃⼰的取值范围,也就是存储的数值的最⼤值和最⼩值的区间。

2. limits.h ⽂件中说明了整型类型的取值范围。

3. float.h 这个头⽂件中说明浮点型类型的取值范围。

4. 为了代码的可移植性,需要知道某种整数类型的极限值时,应该尽量使⽤文件中定义的表示符常量。

十一、变量

11.1 变量的创建

1. 类型是⽤来创建变量的。

2. C语⾔中把经常变化的值称为变量,不变的值称为常量。

3. 变量创建的语法形式是这样的:data_type name;

4. 变量在创建的时候就给⼀个初始值,就叫初始化。

11.2 变量的分类

 1. 全局变量:没有被任何⼤括号包含的变量,整个⼯程中想使⽤都是可以用的。

2. 局部变量:在⼤括号内部定义的变量,只能在⾃⼰所在的局部范围内使⽤。

3. 注意:其实当局部变量和全局变量同名的时候,局部变量优先使⽤。

 本篇文章已完结,谢谢支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1604018.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

有哪些网站设计教程

网站设计教程是帮助人们学习如何设计和开发网站的资源&#xff0c;它们提供了从基础知识到高级技巧的全方位指导。无论您是初学者还是经验丰富的开发者&#xff0c;都可以从这些教程中获益。下面是一些广受欢迎的网站设计教程&#xff0c;它们涵盖了各种技术和工具&#xff1a;…

Linux之进程控制进程终止进程等待进程的程序替换替换函数实现简易shell

文章目录 一、进程创建1.1 fork的使用 二、进程终止2.1 终止是在做什么&#xff1f;2.2 终止的3种情况&&退出码的理解2.3 进程常见退出方法 三、进程等待3.1 为什么要进行进程等待&#xff1f;3.2 取子进程退出信息status3.3 宏WIFEXITED和WEXITSTATUS&#xff08;获取…

【C++题解】1345. 玫瑰花圃

问题&#xff1a;1345. 玫瑰花圃 类型&#xff1a;基本运算、小数运算 题目描述&#xff1a; 有一块nn&#xff08;n≥5&#xff0c;且 n 是奇数&#xff09;的红玫瑰花圃&#xff0c;由 nn 个小正方形花圃组成&#xff0c;现要求在花圃中最中间的一行、最中间的一列以及 4 个…

SpringBoot多数据源基于mybatis插件(三)

SpringBoot多数据源基于mybatis插件&#xff08;三&#xff09; 1.主要思路2.具体实现 1.主要思路 MyBatis的插件机制允许你在MyBatis的四大对象&#xff08;Executor、StatementHandler、ParameterHandler和ResultSetHandler&#xff09;的方法执行前后进行拦截&#xff0c;并…

考察自动化立体库应注意的几点

导语 大家好&#xff0c;我是智能仓储物流技术研习社的社长&#xff0c;老K。专注分享智能仓储物流技术、智能制造等内容。 整版PPT和更多学习资料&#xff0c;请球友到知识星球 【智能仓储物流技术研习社】自行下载 考察自动化立体仓库的关键因素&#xff1a; 仓库容量&#x…

linux 中ifconfig 无法使用

1、先看问题 2、搜索 ifconfig 命令&#xff0c;看下该命令在哪 yum search ifconfig 可以看到ifconfig命令在 net-tools.x86_64这个包里。 3、下面开始安装&#xff0c;执行下面的命令 yum install net-tools.x86_64 4、查看是否安装成功 ifconfig 看到上面的ip就说明可以用了…

光网络中的低偏SOA与无源波导单片集成

----翻译自Aref Rasoulzadeh Zali等人2021年撰写的文章 摘要 在光通信系统中&#xff0c;非常需要可以通过简单工艺与无源光路单片集成的低偏振相关半导体光放大器&#xff08;SOA&#xff09;。然而&#xff0c;尽管已经报道了几种SOA&#xff0c;但在InP平台中将偏振无关的体…

ROS学习笔记(12)AEB和TTC的实现

0.前提 在自动驾驶领域有许多关于驾驶安全的措施AEB和TTC就是为了驾驶安全而设计出来的。在这篇文章中我会讲解我对AEB和TTC算法的一些理解。本期ROS学习笔记同时也是ros竞速小车的学习笔记&#xff0c;我会将我的部分代码拿出来进行讲解&#xff0c;让大家更好的理解ttc和aeb…

html接入高德地图

1.申请key key申请地址&#xff1a;https://console.amap.com/dev/key/app 官方文档 https://lbs.amap.com/api/javascript-api-v2/summary 2.html接入示例 需要将YOUR_KEY替换成自己的key <!doctype html> <html> <head><meta charset"utf-…

未来计算机的发展趋势是什么?

未来计算机的发展趋势是多方面的,涵盖了硬件、软件、体系结构以及计算范式等多个层面。以下是一些预期的趋势: 1. 量子计算: 随着量子理论的不断成熟和技术的进步,量子计算机将可能解决传统计算机难以处理的问题,比如药物发现、材料科学、复杂系统模拟等领域。量子计算的…

VMWare Ubuntu压缩虚拟磁盘

VMWare中ubuntu会越用越大&#xff0c;直到占满预分配的空间 即使系统里没有那么多东西 命令清理 开机->open Terminal sudo vmware-toolbox-cmd disk shrink /关机-> 编辑虚拟机设置->硬盘->碎片整理&压缩 磁盘应用 开机->disk usage analyzer(应用) …

Java面试:算法常用面试题汇总

1.说一下什么是二分法&#xff1f;使用二分法时需要注意什么&#xff1f;如何用代码实现&#xff1f; 二分法查找&#xff08;Binary Search&#xff09;也称折半查找&#xff0c;是指当每次查询时&#xff0c;将数据分为前后两部分&#xff0c;再用中值和待搜索的值进行比较&…

格灵深瞳,实现核心能力高强度保护与灵活交付

格灵深瞳&#xff0c;AI领域的领先企业&#xff0c;借助泰雷兹圣天诺技术&#xff0c;实现核心能力高强度保护与灵活交付&#xff0c;引领行业风向&#xff0c;安策信息助力AI行业企业实现产品核心能力保护、销售模式创新以及软件产品的灵活交付。 格灵深瞳&#xff0c;AI领域的…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(2)——架构分析 - 核心思想环境搭建技术选型

4.架构分析 4.1.核心思想 超越一阶提示&#xff0c;通过增加静态知识库和信息检索方案或简单的总结方案来扩展语言模型。 将这些想法扩展到构建一个代理架构&#xff0c;该架构处理检索&#xff0c;其中过去的经验在每个时步动态更新&#xff0c;并混合与npc当前上下文和计划…

算法与数据结构要点速学——通用 DS/A 流程图

通用 DS/A 流程图 这是一个流程图&#xff0c;可以帮助您确定应该使用哪种数据结构或算法。请注意&#xff0c;此流程图非常笼统&#xff0c;因为不可能涵盖每个场景。 请注意&#xff0c;此流程图仅涵盖 LICC 中教授的方法&#xff0c;因此排除了像 Dijkstra 等更高级的算法。…

ruoyi单体+react+antdesign

基于ruoyi vue和Ruoyi-React实现的快速开发工具。 源码地址&#xff1a;GitHub - hebian1994/ruoyi-react-single: use ruoyi to generage java backend code and reacr front end code 前端&#xff1a;基于ant-design-pro 后端&#xff1a;单体springboot项目(非cloud)mysq…

Windows版PHP7.4.9解压直用(免安装-绿色-项目打包直接使用)

安装版和解压版 区别 安装版: 安装方便&#xff0c;下一步------下一步就OK了&#xff0c;但重装系统更换环境又要重新来一遍&#xff0c;会特别麻烦解压版&#xff08;推荐&#xff09;&#xff1a; 这种方式&#xff08;项目打包特别方便&#xff09;能更深了解mysql的配置&…

基于Springboot+Vue的Java项目-母婴商城系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

上线流程及操作

上节回顾 1 搜索功能-前端&#xff1a;搜索框&#xff0c;搜索结果页面-后端&#xff1a;一种类型课程-APIResponse(actual_courseres.data.get(results),free_course[],light_course[])-搜索&#xff0c;如果数据量很大&#xff0c;直接使用mysql&#xff0c;效率非常低--》E…

【复习笔记】FreeRTOS(六) 队列操作

本文是FreeRTOS复习笔记的第六节&#xff0c;队列操作。 上一篇文章&#xff1a; 【复习笔记】FreeRTOS(五)时间片调度 文章目录 1.队列操作1.1.队列操作过程1.2.队列操作常用的API函数 二、实验设计三、测试例程四、实验效果 1.队列操作 队列是为了任务与任务、任务与中断之间…