前言:
C语言是学习编程的一门语言,C语言概念少,词汇少,包含了基本的编程元素,再后来的很多语言如(C++,Java)等都参考了C语言,所以想要学好编程,C语言是必不可少的一门,而且C语言的热门程度也是占据前首。
1.C语言是什么
在我们日常生活中人与人交流的语言为自然语言,如:汉语,英语等。那么人与计算机交流就需要计算机语言,我们已经知道了世界上计算机语言存在多种,C语言只是其中的一门编程语言。当然有句话为——"C生万物",所以C语言是一门重要的编程语言。
C语言最初是作为Unix系统的开发工具而发明的。
2.编译和链接
C语言是一门编译型计算机语言,C语言中源代码都是文本文件,文本文件是无法被执行,要通过编译器的编译和连接器的链接,才可生成二进制的可执行文件,最终文件才能被执行。C语言代码是放在.c为后缀的文件中的,要得到最终的可执行程序,就需要经过编译和链接两个过程。每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj)为后缀的文件。多个目标文件和库文件经过连接器处理生成对应的可执行文件(.exe)文件。
那么也可以在电脑中找到对应的文件,使用文本打开方式,就可以观察。
3.编译器的对比
那么我们大概了解了编译和链接,我们也知道C语言是一门编译型的计算机语言,那么我们需要依赖什么编译器将计算机语言转换成机器能够执行的机器指令?,以下是我们常见的C语言编译器。
如:MSVC / clang / gcc 这些都是常见的编译器,也有一些集成开发环境如:VS2022 / DevC++ / clion / XCode / CodeBlocks 等等。
那么什么是集成开发环境(IDE),集成开发环境是用于提供程序开发环境的应用程序,一般包含了代码编辑器,编译器,调式器和图形用户界面等工具,是集成了代码的编写功能,分析功能,编译功能,调式功能等一体化开发软件。
*VS2022集成了MSVC:安装包比较大,安装也简单,无需要多余的配置,使用起来也非常方便
*XCode:集成了clang(苹果电脑上的开发工具)
*CodeBlocks:集成了gcc(比较小众,需要配置环境)
*DevC++:集成了gcc(小巧,过于简单,适合一些竞赛使用)
*Clion:是默认使用CMake,编译器可以配置(要收费)
那么相较于我比较推荐使用vs2022,因为”好吃又实惠“,下载就下社区版。
Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com)
4.写第一个C语言程序
1.创建项目
那么我们使用vs2022,来编写第一个C语言代码,先创建项目。
创建新项目
语言选择C++因为 C和C++不分家,选择空项目,然后下一步
项目名起得有意义就可,文件位置放在知道的地方就可
如果进来左边或者右边没有解决方案管理器,可以点击视图,然后点击解决方案资源管理器,就会出现了
点击源文件,然后添加,选择新建项
如果出现这个,点击显示所有模板
选择C++文件,名称为xxx.c为后缀,添加
我们可以看到生成了一个.c为后缀文件,说明创建成功。
2.打印"hello C语言"
我们可以写一个简单代码,在屏幕上输出 "hello C语言" ,那么我们运行代码可以点击上面绿色的箭头,或者使用键盘Ctrl+F5 或Ctrl+Fn+F5 代码就可以成功运行。
我们可以看到一些不认识的代码,对于第一行的代码可以先忽略。那么其他代码我们该如何去理解?接下来我们就把代码拆分。
#include<stdio.h> :include意思为"包含" , std是standard的缩写意为"标准的" , i为input的缩写意为"输入" , o为output的缩写意为"输出" , .h为header意为头文件。
int main() :int 为整型 , main是主函数,()为函数参数。
{} :两个花括号包含着代码。
return 0 :表示返回,当然你也可以返回1,2...,但是返回0表示为正常返回。
3.main函数
每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口main函数也称为:主函数。main函数前面的int表示main函数执行结束后返回一个整型int的值。所以main函数的最后写上return 0 ;
1.main函数是程序的入口
2.在源文件中main函数有且只有一个
如何解释main函数是程序的入口?我们可以通过调式看到箭头开始指向的是main函数第一行,所以main函数为程序的入口。
那么如何理解main函数有且只有一个? 当我多写了一个main函数,可以看到报了错误,所以也验证了main函数有且只有一个。
4.printf函数和库函数
在上边的代码我们可以看到,要想打印"hello C语言",我们需要使用了一个函数为printf函数。我们可以简单了解一下printf函数,printf函数是一个库函数,它的功能为在标准输出设备上进行信息的打印。printf函数也可以打印其他类型的数据。
我们可以简单说明一下printf函数:
1.printf函数的print意为打印的意思,f为format格式。你打印数据时,可以指定相对的格式,如果我想打印100,100为整型那么需要用%d , 打印3.14浮点数,需要用%f 。
那么我们也可以有不一样的打印方式,在这里先简单了解一下 。
那么前边已经说明了printf函数是一个库函数。在使用库函数的时候,是需要包含对应的头文件的,如:printf函数需要包含的头文件为
#include<stdio.h>
什么是库函数?
库函数为:为了不再重复实现常见的代码,让程序员提高开发效率 ,C语言标准规定了一组函数,这些函数由不同的编译器厂商根据C语言标准进行函数的实现,提供给程序员使用,这样程序员不在需要进行其他的操作去实现代码,只需要引用对应的头文件,就可以进行函数的使用。这些函数组成了一个库函数,被称之为标准库。
库函数很多,在cpluscplus可以参考 C library - C++ Reference (cplusplus.com)
5.关键字的介绍
什么是关键字?
1.关键字有着特殊的意义,是保留给C语言使用的
2.在我们写代码需要创建标识符时,是不能和关键字重复的
3.关键字是不能自己创建
在C语言中关键字有32个:
我们如何去理解第1点?
下图我们可以了解这些关键字是可以实现一些场景的,所以我们是不能够在创建标识符与关键字重复。
如何理解第2点?
我们可以通过代码看到,我们创建的名字是不能和关键字重名的。我们也能理解为在古代当代帝王及本朝历代皇帝之名进行避讳,所以我们创建的标识符也要和关键字避违。
如何理解第3点?
这些关键字我们自己是不能够创建的,C语言规定好,就像生活中有些事能做,而有些不能做一个道理。
如果对关键字感兴趣也可以在这里看到:C 关键词 - cppreference.com
6.字符和ASCll码
什么是字符?字符其实就是我们在键盘上可以敲出来的各种字符,如:a,b,c,%,#等等,那么C语言中字符是需要英文单引号括起来如: ' a ' , ' b ' ,' c ' 等。
什么是ASCll码 ?
在计算机中所有的数据存储都是以二进制的形式,那这些字符在内存中是如何存储?后来美国国家标准学会(ANSI)出了一个标准的ASCll编码,这些字符都对应着ASCll编码的值,C语言中字符就遵循着ASCll编码的方式。
1.字符A~Z的ASCll码值从65~90
2.字符a~z的ASCll码值从97~122
3.对应的大小写字符(如:a和A)的ASCll码值相差值32
4.数字字符0~9的ASCll码值从48~57
我们可以将这些字符打印来观察,如果是打印字符就用%c ,整型就是%d,来指定打印的格式。
我们也可以把上图的ASCll码值打印出来,但是0-31的ASCll码值是不能够被打印出观察。
那么关于ASCll码值就简单介绍到这里,也可以在cpluscplus上了解更多https://zh.cppreference.com/w/cpp/language/ascii
7.字符串和\0
前边我们已经知道了在C语言中表示字符用英文的单引号,那么如何表示字符串?
其实是使用英文双引号括起来的一串字符就被称为字符串,如:"abcd"就是一个字符串 。那么打印字符串用的指定格式为%s。
那么字符串和'\0'它们之间有什么关系?
我们可以通过调式可以知道原来字符串"abcd"末尾还隐藏存放着一个'\0' ,那么'\0'存在的意义是什么其实,'\0'是字符串的结束标志,当我们在使用printf库函数或者使用strlen函数计算字符串的长度时,遇到'\0'就自动停止了。所以'\0'是字符串的结束标志。
那么我们如何验证'\0'是字符串的结束标志?
我创建了2个数组,一个名为ch1,另一个为ch2,我们经过调式可以看到ch1数组是隐含着'\0'的,但是ch2是没有'\0' 。
我们前边说过'\0'是字符串结束的标志,那么我们把ch1和ch2这2个数组打印在屏幕上观察,我们可以看到为什么ch1正常打印在屏幕上,但是ch2却打印出乱码?
我们可以这样理解
数据是存放在内存空间的那么ch1字符数组和ch2字符数组是两个不一样的内存空间,ch1字符数组中的字符串是隐含着'\0'所以在打印时,遇到'\0'就会自动停止,但是ch2字符数组中是没有'\0'的,为了让打印停止它需要找到'\0' ,所以在寻找的过程中也会打印出内存中的值,因为在这寻找的过程中会这一块内存不仅仅只有ch2。
那么只要我们在ch2数组中加入\0 , 这样在打印的时候遇到 \0 就会停止
8.转义字符
什么是转义字符?其实在我们前边的代码中就运用到了转义字符,如字符'n'是原来的字面意思,但是我加了个'\' ,变为了'\n' , 那么'\' 就会把原来的字符'n',转变为了'\n'为换行的意思。
那么C语言中都有哪些转义字符?
具体有以下:
那么如何理解? 我们一个一个来
1.\a
当打印出来时,会发出系统的响铃
2.\b
退格键,光标会回退一个字符,也就是回退一格
3.\f
换页,将当前的光标位置移动到下一行起始位置
4.\n
换行,将当前位置移动到本行开头
5.\r
将当前的位置,移动到本行开头
6.\t
水平制表符,跳到下一个Tab的位置,C语言中Tab是可以修改的可能是4或者8,这里一个Tab是8个空格
7.\v
垂直制表符,用的不多
8.\'
代表一个单引号
9.\"
代表一个双引号,如果我想打印一个双引号,是不行的会报错,那么加\ , 转义字符就可以打印出来
10.\
把斜杠\,转义成斜杠\
11.?
转义为问号 ,在一些编辑器中3个???打印出来的效果为??】,会把最后一个?变为方括号。所以加斜杠\ , 可以转义成 三个问号 ???
12.\0
空字符(NULL)
13./ddd
ddd表示1~3个八进制的数字
130是8进制,转换成10进制为88,88对应的ASCll码值为X
14./xhh
hh 表示2个十六进制的数字
30的十六进制数为48,对应的ASCll码值为0
9.注释
在C语言中我们写代码,如果遇到不需要的可以进行注释掉,那么应该如何进行注释?
当我们遇到不需要的代码我们可以在前面加2个斜杠//就可以进行注释,但是只能注释一行
或者加/**/,可以注释一行或者多行
有2种注释的方法,/**/比较老一点而且注释如果不注意会有问题,如我在中间末尾加了*/ , 那么下边的*/ 就没有和它匹配的,就会报错
一般来说建议用2个斜杠 // 这样可以注释更加安全,在vs2022中的上边也有注释键
那么其实2个斜杠 // ,也是可以注释多行代码的,只要我们选中就可以,可以使用上边的注释键进行注释,或者使用快捷键注释Ctrl + K + C , 快捷键取消注释Ctrl + K + U
完!