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

目录

前言

一、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. 注意:其实当局部变量和全局变量同名的时候,局部变量优先使⽤。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

互联网大佬座位排排坐:马化腾第一,雷军第二

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这是马化腾、雷军、张朝阳、周鸿祎的座位&#xff0c;我觉得是按照互联网地位排序的。 马化腾坐头把交椅&#xff0c;这个没毛病&#xff0c;有他在的地方&#xff0c;其他几位都得喊声“大哥”。雷军坐第二把交椅…

Linux进程详解二:创建、状态、进程排队

文章目录 进程创建进程状态进程排队 进程创建 pid_t fork(void) 创建一个子进程成功将子进程的pid返回给父进程&#xff0c;0返回给新创建的子进程 fork之后有两个执行分支&#xff08;父和子&#xff09;&#xff0c;fork之后代码共享 bash -> 父 -> 子 创建一个进…

上汽大通:依托电子签网络,升级产业供应链协同

2023年12月&#xff0c;法大大发布了中国首部《汽车行业合同数智化白皮书》&#xff08;点击阅读及下载&#xff1a;中国首部&#xff01;《汽车行业合同数智化白皮书》重磅发布 | 附下载&#xff09;。该白皮书中基于法大大自身参与汽车行业合同数智化建设的实践和思考&#x…

一次Ambari安装记录

引言 Ambari是一个开源的Apache项目,它提供了一个直观易用的Web界面,用于管理、监控和配置Apache Hadoop集群。它是一个集群管理工具,可以帮助管理员轻松地部署、管理和监控Hadoop集群的各种组件,如HDFS、YARN、MapReduce、Hive、HBase等。通过Ambari,用户可以在集群中添…

使用R语言生成频数分布表

概要 使用R语言生成频数分布表 在R语言中&#xff0c;可以使用freq()函数来生成频数分布表。首先&#xff0c;将需要分组的数据存储在一个向量中。然后&#xff0c;使用freq()函数将这个向量作为参数输入&#xff0c;即可生成频数分布表。以下是一个示例&#xff1a; 示例 …

力扣-2259移除指定数字得到的最大结果

思路&#xff1a; 1. def removeDigit(self, number: str, digit: str) -> str:&#xff1a;这是一个类方法&#xff0c;接受两个参数 number 和 digit&#xff0c;分别表示输入的数字字符串和要移除的数字字符&#xff0c;返回一个字符串。 2. n len(number)&#xff1a…

【linux】chmod权限开放(整个文件夹)

文章目录 起因权限查看权限修改 失败权限修改成功 起因 想要共享conda环境给同事&#xff0c;发现同事没权限。 权限查看 ls #查看当前目录 ls -l # 查看当前目录的东西和权限正常情况下是显示 三个rwx分别属于user&#xff0c;group&#xff0c;others 前面第一个rwx 是针…

抖店2024现状,嘴上抱怨内卷不好做,做起来就一做一个不吱声

我是王路飞。 身边有朋友在做抖店的&#xff0c;你要是问他现在抖店做着怎么样&#xff1f; 他绝对会说现在的抖店非常内卷&#xff0c;流量不好搞&#xff0c;达人不好对接&#xff0c;很难做...... 但是私底下做起来&#xff0c;一做一个不吱声~ 这也是现在抖店的一个真实…

【MATLAB源码-第196期】基于matlab的A*融合DWA算法栅格路径规划仿真,画出路径图、姿态角度以及线角速度。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 A算法与DWA算法的融合是一个高效的路径规划策略&#xff0c;这种策略将A算法的全局路径规划能力与DWA算法的局部避障能力结合起来&#xff0c;以期达到更快、更安全的导航效果。以下是对这种融合策略的详细描述。 一、基本概…

RISC-V CVA6 在 Linux 下相关环境下载与安装

RISC-V CVA6 在 Linux 下相关环境下载与安装 所需环境与源码下载 CVA6 源码下载 首先&#xff0c;我们可以直接从 GitHub 一次性拉取所有源码&#xff1a; git clone --recursive https://github.com/openhwgroup/cva6.git如果这里遇到网络问题&#xff0c;拉取失败&#x…

Vue--》深入了解 VueUse 功能性工具集

今天博主为大家介绍一款实用性的插件名字叫做 VueUse &#xff0c;它是专门为 Vue.js 生态系统设计的功能性工具集合。其提供了许多可重用的功能函数&#xff0c;可以帮助开发者更轻松地构建 Vue.js 应用程序。其提供了大量的功能&#xff0c;包括状态管理、副作用管理、组合式…

力扣HOT100 - 2. 两数相加

解题思路&#xff1a; 缺位的节点进行补零处理&#xff0c;如97323补充为973023 注意相加的进位问题 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode head null, tail null;int carry 0;while (l1 ! null || l2 ! null) {int n1 l…

代码随想录算法训练营第20天 |654.最大二叉树、 617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

代码随想录算法训练营第20天 |654.最大二叉树、 617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树 自己看到题目的第一想法看完代码随想录之后的想法自己实现过程中遇到哪些困难 链接: 654.最大二叉树 链接: 617.合并二叉树 链接: 700.二叉搜索树中的搜索 链接: 98.…

Python的多线程

多线程 1. 程序&#xff0c;进程&#xff0c;线程 1、程序是指一组指示计算机或其他具有信息处理能力装置执行动作或做出判断的指令&#xff0c;通常用某种程序设计语言编写&#xff0c;运行于某种目标计算机体系结构上。程序的通俗定义就是&#xff1a;一段可执行的代码 2、进…

http 3.0 有哪些新特性

HTTP/3 是超文本传输协议&#xff08;HTTP&#xff09;的最新主要版本&#xff0c;其显著特点是放弃了传统的TCP作为传输层协议&#xff0c;转而采用基于UDP的QUIC&#xff08;Quick UDP Internet Connections&#xff09;协议。以下是HTTP/3利用QUIC实现高性能传输的关键特性&…

检索增强生成(RAG)技术

随着大型语言模型&#xff08;LLMs&#xff09;在自然语言处理&#xff08;NLP&#xff09;领域的显著进步&#xff0c;它们在多个评估基准测试中显示出超越人类水平的语言和知识掌握能力。然而&#xff0c;这些模型在实际应用中也面临着一系列挑战&#xff0c;如制造事实、知识…

关于stm32cubemx时钟设置中css enable的作用

STM32已提供了一个时钟失常恢复机制(CSS)&#xff0c;当系统选择HSE作系工作时钟&#xff0c;并打开了CSS功能后&#xff0c;当HSE由于外部原因而停震时&#xff0c;系统将自动切换到内部HSI运行&#xff0c;并产生NMI中断&#xff0c;于是可以在NMI中断中进行安全处理。在cube…

Java中的BIO、NIO与AIO

1.概述 I/O 模型简单的理解&#xff1a;就是用什么样的通道进行数据的发送和接收&#xff0c;很大程度上决定了程序通信的性能。Java 共支持 3 种网络编程模型 I/O 模式&#xff1a;BIO、NIO、AIO。 2.Java BIO Java BIO(Blocking I/O)&#xff1a;是传统的java io 编程&#…

话题——为什么要学习程序,成为程序员呢?

选择成为一名程序员&#xff0c;这对我而言并非是一时冲动&#xff0c;而是深思熟虑后的坚定选择。在当下这个信息化、数字化的时代&#xff0c;程序员这一职业不仅具有极高的技术含量&#xff0c;更承载了推动社会进步、引领科技发展的重任。特别是在深度学习这一前沿领域&…

【六十四】【算法分析与设计】699. 掉落的方块,离散化操作,线段树优化,区间查询sum+区间更新update

699. 掉落的方块 在二维平面上的 x 轴上&#xff0c;放置着一些方块。 给你一个二维整数数组 positions &#xff0c;其中 positions[i] [left(i), sideLength(i)] 表示&#xff1a;第 i 个方块边长为 sideLength(i) &#xff0c;其左侧边与 x 轴上坐标点 left(i) 对齐。 每个…