今天要讲的是C语言的相关概念,这是我学习C语言编程的相关详细日记,关于这样的文章我会从C语言的基础写到学习C语言的结束,来记录我的学习C语言编程之路,希望我的博客日记对于那些学习C语言的人有所帮助,当然我还是一个小白,有可能有些知识点没总结到位,我会不断改善学习,改善自己博客文章越来越好,希望编程大佬们能有所指点和批评。
一.C语言是什么?
对于刚学习C语言的人来说通常第一个问题是什么是C语言?
比如:大家都知道人与人交流需要语言,通过交流之后人们进行判断来执行什么动作,如:人–汉语/英语/法语–人————>然后去做相关的事情,而C语言就是相当于汉语等语言,是人与计算机交流所用到的语言,通常计算机来执行人们想要的发生动作。
同时人与人交流有很多语言:英语,法语,俄语,人与计算机交流也是如此:C语言,Java,python等许多编程语言。
这样是不是对C语言是什么有所了解吧?
接下来科普一些知识
C语言和c++都是编译型计算机语言需要编译器,而Python是解释型计算机语言需要解释器。
我们要知道我们写出的C语言代码只是文本,这些代码需要经过编译 --> 链接 --> 转化成二进制可执行程序才可以被计算机执行进行运行。
如图
二.使用的编译器
我使用的编译器是vs2022,在这里我就简单说一下怎么操作编写第1个代码
首先第一创建项目,第二创建源文件,第三写代码,可以去网上搜VS2022编译器安装,编写代码,因为网上有多教学视频讲的很详细,肯定比我写得好,在这里我就不在讲解了。
写出第一个代码
关于代码的运行可以用快捷键CTRL+F5(编译+链接+运行,这就是vs2022是集成开发环境)。
关于上面的代码进行稍微进行一些讲解
int main()
{
return 0;
}
int : 它是main函数的返回类型,int表示整型。
main() : 函数的名字,括号不能省略。
那一个大括号是是函数体,return 0表示返回值。
这是一个固定的写法,后期慢慢的理解。
三.main函数
main函数为主函数,是程序的入口,所有的代码都是从main函数的第一行开始,但要记得一个项目有且只有一个main函数。
不要多问这就是基本写法,语法规则的。
四.printf函数和库函数
printf是一个库函数,它是用在屏幕上打印信息的,打印的信息可以是各种各样的信息,库函数的含义:通俗的说:库里面的函数不是我们的函数,而是别人写好提供给我们他们的函数,我们拿来进行使用,当我们看到这种xxxx.h文件具有.h后缀文件的就是库函数。
那为什么有库函数呢?
它是为了提高程序员的开发效率,不同的编译器的厂商规定了一种组函数,形成了标准库,又叫库函数,提供给程序员方便使用,我们要知道关于一系列的函数一般都会声明在同一个文件中。
其实有很多库函数,提供一个网站可以方便查找我们不认识的函数:https://cplusplus.com/reference/clibrary/
五.关键字
关键字具有特殊的含义它是留给C语言使用的,不能自己创建,同时创建标识符时的时候不能与关键字重复。
我在下面罗列出一些常见的关键字
1.auto break case char const continue default do double else enum extern
2 float for goto if int long register return short signed sizeof static
3 struct switch typedef union unsigned void volatile while
如果你想要查更多的关键字可以访问:https://zh.cppreference.com/w/c/keyword
六.字符和ASCII编码
在C语言中字符是用单引号括起来的,打印的时候以**%c的格式进行打印,我们要知道因为计算机的数据都是由二进制进行储存**的,所以要存储字符的话就要给每一个字符编一个二进制序列,叫编码,为了防止不发生混乱,国际上对字符在内存中二进制的储存制定了标准,叫ASCII编码,而字符在底层存储的时候储存的就是它的ASCII值。
我们不需要记住所有的ASCII码表中的数字,如果要使用不知道的时候查看就可以了,记一些特殊的就行:
1.字符A到Z的ASCII码值从65~90
2.字符a到z的ASCII码值从97~122
3.对应的大小写字符(a和A)的ASCII码值的差值是32
4.数字字符0到9的ASCII码值从48~57
5.换行\n的ASCII值是:10
6.在这些字符中ASCII码值从0~31这32个字符是不可打印字符,无法打印在屏幕上观察
关于一些常识我们要知道,在用printf函数打印信息的时候,打印一个字符的时候用%c的格式打印出来的是字符,%d的格式的话打印出来就是它对应的ASCII值,如果用%c打印字符的ASCII值,打印出来的是对应的字符。
记住%c就是用来指定打印字符的。
提一个问题:我们知道0到31这32个字符是不可打印字符,但如何将32到127的数字以%c的形式打印出来呢?其实就是将数字32~127的ASCII值对应的字符打印出来。
用到了不知道的东西,先不用管它,后面会讲到
七.字符串和/0
将多个字符放在一起连成一串,用双引号把它扩起来就叫字符串,字符串的打印格式是%s,或者不用格式直接打印字符串,打印出来的效果是一样的,只有字符串能这样做哦,
小知识:字符串的末尾隐藏着一个\0的字符,它标志着字符串的结束。
比如:对于字符串"abcdef",我们虽然实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏一个\0的转义字符,\0是字符串的结束标志。所以我们在使用库函数 printf()打印字符串或者strlen()计算字符串长度的时候,遇到\0的时候就自动停止了。
当我们写一段代码,将字符串放在两个数组中,看一看有什么不同
从上面我们可以看到两个不同的内存分布
之后,我们再来看打印两个数组的结果
从上面看我们会有一些困惑,为什么第二行打印的是这样的呢?为什么不与第一行一样呢?因为arr2数组中没有\0,所以打印数组arr2的时候打印完字符C以后不会停止,会继续往后打印,打印出的是随机值,直到后面的随机值遇到\0停止打印。
如果想要arr2数组停下来,可以在它的后面加一个转义字符\0,让它停下来。
那什么是转义字符呢?接下来我们就要讲解转义字符。
八.转义字符
在C语言中,字符中有一组特殊的字符就是转义字符。转移字符,顾名思义就是转变原来的意思的字符。
例子
我先把常规的一些转义字符和一些不常规的转义字符罗列出来,再一个一个的详细讲解。
\?:在书写连续多个问号时使用,防止它们被解析成三字母词,但在新的编译器上没法验证了。
\‘:用于表示字符常量’
\":用于表示一个字符串内部的双引号
\\:用于表示一个反斜杠,防止它被解释为一个转义序列符。
\a:警报,这会使得终端发出警报声或出现闪烁,或者两者同时发生。
\b:退格键,光标回退一个字符,但不删除字符。
\f:换页符,光标移到下一页。在现代系统上,这已经反映不出来了,行为改成类似于\v.
\n:换行符。
\r:回车符,光标移到同一行的开头。
\t:制表符,光标移到下一个水平制表位,通常是下一个4/8的倍数。
\v:垂直分隔符,光标移到下一个垂直制表位,通常是下一行的同一列。
下面是2种不常规的转义字符可以理解为:字符的8进制或者16进制表示形式
\ddd:d d d表示1~3个八进制的数字。
如:\130 表示字符X
\xdd:d d表示2个十六进制数字。
如:\x30 表示字符0
\0:null 字符,代表没有内容,\0就是\ddd 这类转义字符的一种,用于字符串的结束标志,其ASCII码值是0.
现在我们进行一个一个介绍
1.\?防止多个问号使用时被解析成三字母词,在老编译器上会出现,新的没法验证了,加一个斜杠就是为了让问号变成一个普通的问号。
如:??)在老编译器上会被解析成一个方括号所以在两个问号前都加一个斜杠,让问号变成一个普通的问号。
2.\‘用于表示字符常量’,当我们想要打印一个单引号的时候,就是让它变成一个普普通通的单引号。
当有三个单引号时,前两个单引号会组成一对不会单独打印出来一个单引号,加上一个斜杠,就让那个单引号不与它形成一对,而成为一个普普通通的单引号进行打印。
3.\“用于表示字符串内部的双引号,同上面一样,当打印一个双引号的时,它会以前两个形成一对,另一个落单并不会打印出来,但在它前面加上一个**,让它不与第1个形成一对,成为一个普普通通的双引号**进行打印。
4.\\表示一个反斜杠防止被解析成一个转义序列符
例子
当我们想用字符串打印这个路径的时候,发现**\t被翻译成一个转义字符,表示电脑键盘上的tap键,跳过一定的宽度,这并不是我们想要的,所以等我们在\t前头再加一个**,把的那个t前面的斜杠转化成一个普普通通的斜杠,不让\t再是一个转移字符,这样我们就可以打印我们想要的路径了。
5.\a会让电脑终端发出报警或者闪烁,两者有可能同时发生,
例子
6.\b为退格符,也叫退格键,表示光标回退一个字符,但不删除字符。
请看下面的例子
我们可以看出,在打印这个字符串时先打印a再打印b再打印c,但是,等再打印到斜杠b的时候,光标它会往后退一个格,退到c的前面把c覆盖掉,然后再打印def就形成了这个结果。
从上面两个可以看出加一个\b,光标回退一个,加两个\b光标回退两个,如果后面还要打印字符就会把那个光标会退的位置的字符覆盖掉。那个getchat可以先不用关心它是什么,它是方便我们进行观察的。它是为了获取一个字符存在的,程序不会结束,必须输入一个字符才能停止。
7.\f用的很少,它是换页符,这个就不多说了。
8.\n这个就很熟悉了,它就是换行符,也不过多说了。
9.\r为回车符,光标移到同一行的开头,就像老式的打印机一样,那一行打印完之后按回车,然后就从末尾回到了行首,重新进行打字,其实那些字向上移了一行,然后再回到行首。而这个**\r就是光标直接回到行首**。
10.\t为制表符,光标移到下一个水平制表位通常是下一个4或8的倍数。一般是用在输出的时候让它们进行对齐。
这个\t就是让后面那个字符对齐的,让它对齐到下一个8个字符的位置上。从上面可以看到,如果前面不够8个字符就用空格来补齐,在当下VS环境下,一个\t的宽度是8个,如果听不懂,可以自己慢慢体会体会。
11.\v为垂直分隔符,一般没啥用,可以不用关心。
欧克,常规的转移字符终于结束了。
来看特殊的转义字符
下面两种转移字符可以理解为字符的八进制和十六进制的表示形式
\ddd它后面三个d是表示1~3个8进制的数字。如斜杠130表示字符X。
从上面我们来进行分析,130是8进制转化成10进制是88,打印的时候就是先将130转化成10进制,而这数字88就是字符X对应的ASCII值,从而将字符X打印出来。
\xdd,后面两个dd是16进制数字
从上面可以看出打印出来的字符0,它是将16进制转化成10进制是48,而ASCII值48对应的字符就是字符零,我们可以反过来想字符X的八进制表示形式就是\130,字符零的16进制表示形式就是\x30。
同样我们来看\0那不就是\ddd的形式吗?
九,strlen函数
接下来我们来介绍一个strlen函数,它是用来计算字符串长度的,它是一个库函数,那就一定会头文件<string.h>。
例子
我们可以看出abc字符串长度是3,虽然知道末尾隐藏一个字符\0,但并不把它计算在计算字符串长度上,在用strlen函数计算字符串长度时遇到\0停止,只计算\0前面的字符,同样在printf打印的时候遇到\0也会停止。
OK,我们来看一个题
这个题的答案是17,其中我们需要注意的点是转义字符算一个字符,还有\后面的数字的大小也需要关注,我们刚学过那两个特殊的转义字符,但要知道8进制的数字是0到7,16进制的数字是0到15,所以\后面跟的数字超过了该格式就不算一个字符里面的了。
十.语句和语句分类
我们要知道C语言代码是由一条一条语句构成。
接下来我介绍一些语句
1.空语句
分号前面就是一条语句,是空语句,一般出现的地方是:这里这个语句不需要做任何事,就可以写一个空语句。
int main()
{
;//这就是空语句
return 0;
}
2.表达式语句
如:3+5;
3.函数调用语句
从上面可以看出我们调用了printf函数,这个语句叫函数调用语句。
除了库函数,还有我们自己的函数,将它调用的时候也是属于函数调用语句。
4.复合语句
复合语句就是代码块,一个大括号扩起来的一段代码就是一个代码块,他就是一个复合语句,复合语句就是多条语句放在一起的效果。如:for循环,一个函数,都是一个大括号括起来的,他们是复合语句。
5.控制语句
控制语句是c语言中用的最多最多的,它是用于控制程序的执行流程,以实现程序的各种结构方式,它们都特定的语句定义符组成。C语言是结构化的程序设计语言,那什么是结构化呢?C语言支持三种结构,顺序结构,选择结构,循环结构,可以想象一下我们生活中,任何事都可以拆分成这三种结构的组合。
C语言中具有9种控制语句,又分为三类语句
这三类语句是分支语句,循环执行语句,转向语句,组合起来叫我们的控制语句。这些控制语句很好的帮助我们完成了顺序结构选择结构循环结构结果
分支语句:if语句,switch语句;
循环执行语句:do while语句,while语句,for语句;
转向语句:break语句,goto语句,continue语句,return语句;
十一.注释
注释是对我们所写前面的代码的解释说明,翻译器是不会进行编译,注释会被替代,编译的时候注释会被删掉,替换成一个空格,不会发生编译,注释这个是给程序员看的。好的注释可以让我们更好的理解代码,但也不要写没必要的注释或者过度注释,如果写过长的代码比较复杂的话,不写注释会让阅读的人发狂。或者自己发狂看不懂以前写的代码。写出注释是反映了程序员的素养会给面试官留下更好的印象一定要写必要的注释哦。
关于注释的两种形式
1./注释的内容/
/*做事
内容
*/ 这是多行注释。
但一定要记得/与最近的/进行匹配,不支持嵌套注释的。
2.//的形式
它是c99标准新增的语法。//注释的内容,它每次只能注释一行。
最后教大家两个快捷键注释:Ctrl+k+c。
取消注释:Ctrl加k+u。
欧克,初识c语言常见概念这篇就结束了,对你是否有用呢?感谢支持!!!