C语言是什么?
人与人交流用自然语言,人与计算机交流用计算机语言,人通过计算机语言编写程序,给计算机下达指令,让计算机工作。
C语言是众多计算机语言的一种,C++/Python/Java也都是计算机语言。
C的历史
C语言最初是作为Unix系统的开发工具而发明的。在1969年,贝尔实验室的肯.汤普森与丹尼斯里奇共同开发了Unix系统,该系统本身是用汇编语言写的,太复杂,为了更容易移植到其他计算机,发明了B语言,但B语言也不好用,于是在1972年,丹尼斯.里奇和布莱恩.克林汉B的基础上发明了C语言,1973年Unix被C语言重写,C语言慢慢流行起来,有很多人对C语言进行扩充,一定程度上导致一些地方的C和一些地方的C不能通用,于是在1988年C语言标准化,一直至今。
编译器
编译与链接
C是一门编译型计算机语言,C语言的源码只是文本文件,只有通过编译器的翻译和链接器的链接,生成二进制可执行文件,才能执行。(计算机只能识别二进制的指令)。
执行流程:.c文件被编译器编译成.obj文件(目标文件),再被链接器链接为可执行的.exe文件。
编译器对比
C语言是编译型语言,需要依赖编译器将计算机语言转换成机器能执行的机器指令。
msvc,clang,gcc是常见编译器,而我们用的更多是集成开发环境如VS202X,XCode,Clion,DevC++。
集成开发环境(IDE):是用于提供程序开发环境的应用程序,一般包括代码编辑器,编译器,调试器,图形用户界面等。集成了代码编写功能,编译功能,调试功能等一体化的开发软件服务套。
VS202X:集成MSVC,安装简单,不用过多配置,使用方便。
XCode:集成Clang,苹果电脑用。
Clion:默认CMake编译器,但编译器可以自己配置,就是要收费。
CodeBlock:集成gcc,要自己配置环境,超级小众的。
DevC++:集成gcc,工具较简单,一般不用,就竞赛乐意用。
VSCode其实是编辑器,只是可以安装各种插件来搭建C/C++环境,小白不推荐。
项目,源文件与头文件
下面都默认在VS2022中。
创建项目(代码是在项目中管理的),项目名称最好有意义,名称不要特殊字符和中文,项目存放的位置也不要含空格,中文字符,特殊字符。
源文件:就是.c为后缀的文件
头文件:就是.h为后缀的文件
main函数——程序入口
main函数是程序的入口,也叫主函数。main前面的int表示函数执行结束后返回一个整形类型的值,与main函数结尾的return 0前后呼应。
main函数是程序的入口,有且只有一个,程序从main函数的第一行开始执行,即使一个项目中有多个.c文件,也只有一个main函数。
int main()
{
return 0;
}
也不一定都是return 0,也会有异常返回,那时候就要返回非0的值了。
void main属于老写法了,代表不需要返回东西,也就不用写return 0了,但我们现在不用了。
void main()
{
}
另一种写法:
int main(void)
{
return 0;
}
代表main函数不接受参数。
还有一种:
int main(int argc, char* argv[], char* envp[])
{
return 0;
}
argc:程序运行时可执行参数的个数,
argv:程序运行时的可执行参数
envp:环境变量
这些写法启示了我们main函数也是可以有参数的。
库函数
printf是一种库函数,它的功能是打印信息到屏幕。
与其对应的还有输入函数 scanf
而我们要实现输入与输出,就一定要有这个:
#include <stdio.h>
stdio:standard input output
stdio.h:标准输入输出头文件
库函数:不再重复实现常用的代码,让程序员提高效率,C语言规定了一组函数,这些函数由不同的编译器厂商按照C语言的标准去实现,给程序员们用。
这些函数共同组成一个函数库,被称为标准库,函数也就叫库函数了。
不同编译器厂商可能会扩充不同的库函数。
一个系列的库函数一般会声明在同一个头文件中,所以库函数的使用要包含对应头文件。
简单来说就是把常见的功能实现成函数,让程序员直接使用,提高效率。
关键字
C语言中一批保留名字的符号,如if,break,auto,while等等。
1.这些关键字都具有特殊意义,保留给C语言使用。
2.关键字无法自己创建。
3.程序员在创建标识符时不能和关键字重复。
字符和ASCII编码
键盘上能敲出来的都是字符,C的字符是用单引号括起来的,如'a','@','fhg','#'。
计算机能识别以及能存储的都是二进制数据,所以字符在内存中肯定也是二进制方式存储,编码就是人们对于每个字符编的一个二进制序列,序列与字符一一对应。
要记住一些:
字符A-Z是65-90
字符a-z是97-122
大小写对应的ASCII差值是32
字符0-9是48-57
换行\n是10
这些字符中0-31这32个字符不可打印,它们都有特殊意义。
字符串与\0
双引号括起来的一串字符就是字符串,如"asdfgjhkl"
字符串的末尾都隐藏着一个\0,\0是字符串的结束标志。
一定要有\0,不然会出现问题。
转义字符
顾名思义,转变原来意思的字符,如\n,\0
原来是某个意思,加上\后,意思改变。
下面列举常见转义字符:
\?:在书写多个连续问号,防止它们被解析成三字母词。
\':表示字符常量'
\":表示字符串内部的"
\\:表示一个反斜杠,防止被解释为转义序列符
\a:令终端发出警报声或闪烁。
\b:退格,光标回退一个字符但不删除字符。
\f:换页符,光标移动到下一页。
\n:换行。
\r:回车,光标移动到同一行开头。
\t:制表符,光标移动到下一个水平制表位。
\v:垂直分隔符,光标移动到下一个垂直制表位。
下面还有三中特殊的转义字符:
\0:代表null
\ddd:d,d,d表示1-3个八进制数字。(\0就是特殊的\ddd)
\xdd:d,d表示1-2两个十六进制数字。
语句
空语句
单独一个分号就是空语句
int main()
{
;
return 0;
}
表达式语句
表达式后面加上分号就是表达式语句
int main()
{
4+8;
return 0;
}
函数调用语句
函数调用的时候也要加分号,这就是函数调用语句
int main()
{
printf("nihao\n");
return 0;
}
复合语句
就是代码块,及{}里的内容,一个函数就可以说是一个复合语句。
控制语句
用于控制程序的执行流程,已实现程序的各种结构方式(顺序结构,选择结构,循环结构)
条件判断语句(分支语句):if语句,whitch语句
循环执行语句:do while语句,while语句,for语句
转向语句:break语句,continue语句,goto语句,return语句
注释
注释的两种形式
注释就是对代码的说明
1.
/*。。。。*/
/*这是一条注释*/
/*
这种形式的注释
可
以
分行写
*/
2. //
//这种形式就只能写单行,但可以放在句首或句尾。
注释被替换
编译时,注释会被替换成空格,比如说
printf("min/*这里是注释*/Value");
输出出来就是min Value而不是minValue。