C语言常见的概念
编译和链接
C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。C语⾔代码是放在.c为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个过程。
注:.c文件经过编译后生成.obj文件,再通过连接器生成.exe程序
main函数
每个C语⾔程序不管有多少⾏代码,都是从main函数开始执⾏的,main函数是程序的⼊⼝,
main函数也被叫做:主函数。main前⾯的int表⽰main函数执⾏结束的时候返回⼀个整型类型的值。所以在main函数的最后写return 0;正好前后呼应。
•main函数是程序的⼊⼝
•main函数有且仅有⼀个
•即使⼀个项⽬中有多个.c⽂件,也只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)
printf和库函数
printf
这⾥简单的介绍⼀下printf,printf是⼀个库函数,它的功能是在标准输出设备(⼀般指屏幕)上进⾏信息的打印。上⾯的代码是使⽤printf函数打印字符串。只要把想要打印的⼀串字符放在双引号中并传递给printf函数就可以打印。如下述代码。
printf("哈哈哈");
printf是printf+form也就是输出形式。
当然除了字符串也可以打印其他形式。
printf("%d",666);//整型
printf("%c",'a');//字符
printf("%f",3.14);//浮点型
最后别忘记在使用库函数前包含头文件,printf的头文件为inclued<stdio.h>
库函数
那什么是库函数呢?
为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准库,这些函数也被称为库函数。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函数其他编译器不⼀定⽀持)。
可以在下面网站了解库函数
关键字介绍
C语⾔中有⼀批保留的名字的符号,⽐如int if return等这些被称为关键字或者保留字。
•关键字都有特殊的意义,是保留给C语⾔使⽤的
•程序员⾃⼰在创建标识符的时候是不能和关键字重复的•关键字也是不能⾃⼰创建的。
在c99标准中添加了inline ,restrict,_ Bool,_ Complex,__Imaginary等关键字。
字符和ASCII编码
在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:‘a’,‘b’,‘@’。我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII编码,C语⾔中的字符就遵循了ASCII编码的⽅式。
参考:https://zh.cppreference.com/w/cpp/language/ascii
•字符A–Z的ASCII码值从65–90
•字符a–z的ASCII码值从97–122
•对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
•数字字符0–9的ASCII码值从48–57
•换⾏\n的ASCII值是:10
•在这些字符中ASCII码值从0~31这32个字符是不可打印字符,⽆法打印在屏幕上观察
如果想看可打印字符,可输入以下代码查看
#include<stdio.h>
int main()
{
int i=0;
for(i=32;i<=127;i++)
printf("%c",i);
return 0;
}
字符串和\0
C语⾔中如何表⽰字符串呢?使⽤双引号括起来的⼀串字符就被称为字符串,如:“abcdef”,就是⼀个字符串。
字符串的打印格式可以使⽤%s来指定,也可以直接打印如下:
#include<stdio.h>
int main()
{
printf("%s","abcdefg");
printf("abcdefg");
return 0;
}
C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个\0字符,这个\0字符是字符串的结束标志。
C语⾔中也可以把⼀个字符串放在⼀个字符数组中,我们在这⾥利⽤下⾯的代码验证⼀下\0的功能。
#include<stdio.h>
int main()
{
char arr1[] = { 'a','b','c','d'};//arr1三个字符
char arr2[] = "abcd";//arr2放一个字符串
printf("%s\n", arr1);
printf("%s\n", arr2);
return 0;
}
可以看到字符串后边自带一个/0,arr1因为没有/0,所以不会停止,所以输出了一些随机值。
但是arr2的打印就是完全正常的,就是因为arr2数组是使⽤字符串常量初始化的,数组中有\0
如果输入以下代码会有什么结果呢
int main()
{
char arr1[] = { 'a', 'b', 'c', '\0' };
char arr2[] = "abc";
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", "abc\0def");
return 0;
}
此时输出结果一致
转义字符
也许在前⾯的代码中你看到\n ,\0很纳闷是啥。其实在字符中有⼀组特殊的字符是转义字符,转义字符顾名思义:转变原来的意思的字符。
C语⾔中像这样的转义字符还有⼀些,具体如下:
• ?:在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。• ‘:⽤于表⽰字符常量’
• ":⽤于表⽰⼀个字符串内部的双引号
• \:⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
• \a:警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
• \b:退格键,光标回退⼀个字符,但不删除字符。
• \f:换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于\v。• \n:换⾏符。
• \r:回⻋符,光标移到同⼀⾏的开头。
• \t:制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
• \v:垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
• \ddd:ddd表⽰1~3个⼋进制的数字。如:\130表⽰字符X
• \xdd:dd表⽰2个⼗六进制数字。如:\x30表⽰字符0
转义字符参考:[](https://zh.cppreference.com/w/c/language/escape)
语句和语句分类
C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:•空语句
•表达式语句
•函数调⽤语句
•复合语句
•控制语句
此处不细讲
符X
• \xdd:dd表⽰2个⼗六进制数字。如:\x30表⽰字符0
转义字符参考:[](https://zh.cppreference.com/w/c/language/escape)
语句和语句分类
C语⾔的代码是由⼀条⼀条的语句构成的,C语⾔中的语句可为以下五类:•空语句
•表达式语句
•函数调⽤语句
•复合语句
•控制语句
此处不细讲