1.C语言是什么
C语言是一门编译型计算机语言,人们通过使用计算机语言,对计算机进行相关的指令,让其进行工作,
2.编译与链接
因为计算机仅能识别二进制指令,而C语言源代码属于文本文件,文本文件本身无法执行,所以需要编译器进行翻译及链接器的链接, 生成二进制可执行文件,才可运行。
C语言是存放在源文件(以.c为后缀)中经过编译器处理生成对应的目标文件(以.obj为后缀),后多个目标文件和库文件经过链接器处理生成对应的可执行程序(以.exe为后缀)。
C语言中以.h为后缀的文件称为头文件。
3.main函数
C语言程序无论多少都从main函数开始,main函数是程序的入口,main函数也称为:主函数。main函数前面表示函数执行结束时返回一个相对应类型的值。
这里main函数前面的int表示返回值是一个整型 ,所以return 0;返回值为整型
int main()
{
return 0;
}
注意:
- main函数是程序的入口
- main函数有且仅有一个
- 即使一个项目中有多个.c的源文件,但是也仅有一个main函数
main函数后的()中也可以有:
- oid,表示返回为空,void也可不写
- 参数(当需要使用到该函数中的参数是才加入参数)
int main(int a,int b){}
4.printf函数及库函数
printf是一个库函数,功能是在标准输出设备(例如屏幕)上进行信息打印。可用来打印各种类型的数据 ,例如:
printf("%d\n",a);//打印整型
printf("%s\n",a);//打印字符串
printf("%c\n",a);//打印字符
printf("%f\n",a);//打印浮点数
其中%d,%c等是占位符,会被后面的值替换。
我们在使用库函数时,是需要包含头文件的,比如printf函数需要包含stdio.h这个头文件。
#include <stdio.h>
库函数 是为了提高程序员编程效率产生的。C语言标准规定一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了一个函数库,被称为标准库。
一个系列的库函数一般会声明在同一个头文件中,所以库函数的使用,要包含对应的头文件。
5.关键字
C语言中有一些保留名字的符号,例如:int、if、return,这些符号被称为保留字或者关键字。
- 关键字都具有特殊的意义,是保留给C语言使用的
- 程序员在创建标识符时不能与关键字重复
- 关键字也不能自己创建
C语言的32个关键字如下
6.字符和ASCII编码
在键盘上可以敲出各种字符,例如:a,q,@,#等,都称为字符,C语言中字符是用单引号括起来的,例如:'a','@'。
我们都知道计算机中所有的数据均是二进制的形式存储的,每个人自己对每个字符编一个二进制序列,称为编码,但为了方便大家相互通信,美国国家标准学会出台了标准ASCLL编码,C语言中的字符就遵循了ASCII编码的方式。其中十进制(dec),八进制(oct),十六进制(hex)及字符(ch)编码。
并不需要记住所有的数字,但最好可以掌握几组特殊的数据例如:
- 字符A~Z的ASCII码值从65~90
- 字符a~z的ASCII码值从97~122,与大写相差32
- 数字字符0~9的ASCII码从48~57
- 换行符 \n 的ASCII码为:10
- 从0~31的这32个字符都是不可打印字符,无法在屏幕上观察。
单个字符的打印可以用%c来指定格式:
#include <stdio.h>
int main()
{
printf("%c\n",'Q');
printf("%c\n",81);
return 0;
}
通过如下代码我们可以知道所有可打印的字符:
int main()
{
for(int i = 32; i <= 128; i++)
{
printf("%c ",i);
if(i % 16 == 0){
printf("\n");
}
}
return 0
}
得到结果为:
7.字符串和 \0
在C语言中用双引号括起来的一串字符被称为字符串,例如"ABCDEF",就是字符串。字符串的打印格式可以使用%s来指定,也可以直接打印如下:
int main()
{
printf("%s\n","hellow");
printf("hellow");
return 0;
}
C语言的字符串中一个特殊的知识,就是每一个字符串的末尾隐藏放着一个\0的字符,这个\0发字符是字符串结束的标志。
C语言中也将字符放进数组中
int main()
{
char arr1[] = {'a', 'b', 'c'}; //arr1数组中存放3个字符
char arr2[] = "abc"; //arr2数组中存放字符串
printf("%s\n",arr1);
printf("%s\n",arr2);
return 0;
}
得到了
原因是因为arr1数组中并没有\0的结束字符,所以当打印完abc之后接着打印,但是是乱码,而arr2中由于字符串内部自带的结束字符\0,所以打印完abc就结束了。
如果在arr1数组中加入字符"\0"就可以解决问题。
char arr1[] = {"a", "b", "c", "\0"};
8.转义字符
代码中\0,\n都是转义字符,就是转变原来意思的字符。
例如打印时n可以直接打印,但是加上\则会变成换行符,就从字符变成了换行符。
int main()
{
printf("abcdnf");
printf("\n");
printf("abcd\nf");
return 0;
}
得到结果为:
C语言中还有一些像这样的转义字符,如:
- \' :用于字符常量'
- \" :用于表示字符串内部的双引号
- \\ :用于表示反斜杠,防止其被解释为一个转义序列符
- \a :警报,会使终端发出警报声或者闪烁,或同时发生
- \b :退格键,光标回退一个字符,但不删除字符
- \n : 换行符
- \r :回车符,光标移动到同一行的开头
- \t :制表符,光标移动到下一个水平制表位,通常位下一个4/8的倍数
- \v :垂直分隔符,光标移到下一个垂直制表位,通常是下一列的同一列
- \ddd :ddd表示1~3个八进制的数字。例如\130 表示字符X
- \xdd :dd表示两个十六进制的数字。例如\x30 表示字符0
- \0 :表示空,null字符,表示没有内容,也是\ddd这类转义字符的一种,用于字符串的结束标志,其ASCII码的值是0
\b 退格符的效果:
int main()
{
printf("acbde\n");
printf("acbde\b\n");
printf("ac\bde");
return 0;
}
其中第二行printf函数打印出来的与第一行相同是因为后面没有字符替代退格的字符,而第三行中c被d给代替了,所以得到ade。
\t 制表符的效果:
int main()
{
printf("abcdefg");
printf("abc\tde\tfg");
return 0;
}
其中abc与后面的空格加起来有8个长度,de与后面的空格加起来有8个长度。
\ddd与\xdd的效果:
int main()
{
printf("\130");
printf("\x30");
return 0;
}
八进制中130对应的是十进制中的88,在ASCII码中是X,十六进制中的30对应的是十进制中的48,在ASCII码中是0。
9.语句和语句分类
C语言的代码由一条条语句构成,C语言的语句可分为五类:
- 空语句
- 表达式语句
- 函数调用语句
- 复合语句
- 控制语句
9.1 空语句
一个分号就是一条语句的,是空语句。
int main()
{
;//空语句
return 0;
}
空语句,一般出现的地方是:这里需要一条语句,但是这个语句不需要做任何事,就可以写空语句。
9.2 表达式语句
表达式语句就是在表达式的后边加上分号。例如:
int main()
{
int a = 20;//表达式语句
return 0;
}
9.3函数调用语句
函数调用的时候,也会加上分号,就是函数调用语句。
int Add(int x, int y)
{
return x + y;
}
int main()
{
printf("hehe\n");//函数调用语句
int ret = (2, 3);//函数调用语句
return 0;
}
9.4 复合语句及控制语句
复合语句就是代码块,成对括号的代码就构成一个代码块,也被称为复合语句
控制语句用于控制程序的执行流程,以实现程序的个汇总结构方式(C语言支持三至结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,c语言有九种控制语句。分为三类:
- 条件判断语句也叫分支语句:if语句、swith语句;
- 循环执行语句:do while语句、while语句、for语句;
- 转向语句:break语句、goto语句、continue语句、return语句。
10. 注释
注释是对代码的说明,编译器会忽略注释,注释可以帮我们更好的理解代码。注释有两种形式:
10.1 /**/形式
第一种方法是将注释放在/*......*/之间,内部可以分行。
/*注释*/
/*
注释
*/
这种注释可以插在行内,但要记得将结束符号*/写上。
int fopen(char * s /* file name */,int mode);
10.2 //的形式
第二种写法是双斜杠到行尾都属于注释。这种注释无法穿插在行内,只能是单行,可在行首也可在行尾。
//这是一行注释
int x = 1;//这也是注释
但无论哪种注释都不能放在双引号之中,双引号里面的注释符号,会成为字符串的一部分,结束为普通符号,失去注释作用。
printf("//hello /*world*/");
10.3 注释会被替换
编译时,注释会被替换成一个空格,所以min/*这里是注释*/Value会变成min Value,而不是minValue。