一.源文件和头文件
.c为后缀的文件称为源文件,把.h为后缀的文件成为头文件。
二.第一个C语言程序演示
#include <stdio.h>
int main()
{
printf("你好,C语言");
return 0;
}
在VS2022上运行代码的快捷键一般为Ctrl+F5,但有的电脑因出厂设置不同,需使用Fn+Ctrl+F5才能运行。
三.main函数
每个C语言程序不管有多少行代码,都是从main函数开始执行的,main函数是程序的入口,main函数也被叫做主函数。
main函数前面的int表示main函数执行结束的时候返回一个整型类型的值。所以在main函数的最后写return 0;正好前后呼应。
注意:因为程序的入口只能有一个,所以即使一个项目中有多个.c文件,但是只能有一个main函数。
四.printf和库函数
printf
代码中使用printf函数,实现在屏幕上的信息打印。
printf是一个库函数,它的功能是在标准输出设备(一般指屏幕)上进行信息的打印。
我们在使用库函数的时候,是需要包含头文件的,比如printf函数需要包含的就是stdio.h这个头文件:
那什么是库函数呢?
为了不再重复实现常见的代码,让程序员提升开发效率,C语言标准规定了一组函数,这些函数再由不同的编译器厂商根据标准进行实现,提供给程序员使用。这些函数组成了一个函数库,被称为标准库,这些函数也被称为库函数。在这个基础上一些编译器厂商可能会额外扩展提供部分函数(这些函数其他编译器不一定支持)。
库函数可参考链接: https://cplusplus.com/reference/clibrary/
五.关键字介绍
C语言中有一批保留的名字的符号,比如:int,if,return,这些符号被称为保留字或者关键字。
C语言的关键字的全部介绍:https://zh.cppreference.com/w/c/keyword
六.字符和ASCII编码
在键盘上可以敲出各种字符,如:a, q, @, #等,这些符号都被称为字符,C语言中字符是用单引号括起来的,如:'a', 'b', '@'。
我们知道在计算机中所有的数据都是以二进制的形式存储的,那这些字符在内存中分别以什么样的二进制存储的呢?如果我们每个人自己给这些字符中的每个字符编一个二进制序列,这个叫做编码,为了方便大家互相通信,不造成混乱,后来美国国家标准学会(ANSI)出台了一个标准ASCII编码,C语言中的字符就遵循了ASCII编码的方式。
ASCII 码表
下列码表含有全部 128 个 ASCII 十进制 (dec) 、八进制 (oct) 、十六进制 (hex) 及字符 (ch) 编码。
dec | oct | hex | ch | dec | oct | hex | ch | dec | oct | hex | ch | dec | oct | hex | ch | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 00 | NUL (空) | 32 | 40 | 20 | (空格) | 64 | 100 | 40 | @ | 96 | 140 | 60 | ` | |||
1 | 1 | 01 | SOH (标题开始) | 33 | 41 | 21 | ! | 65 | 101 | 41 | A | 97 | 141 | 61 | a | |||
2 | 2 | 02 | STX (正文开始) | 34 | 42 | 22 | " | 66 | 102 | 42 | B | 98 | 142 | 62 | b | |||
3 | 3 | 03 | ETX (正文结束) | 35 | 43 | 23 | # | 67 | 103 | 43 | C | 99 | 143 | 63 | c | |||
4 | 4 | 04 | EOT (传送结束) | 36 | 44 | 24 | $ | 68 | 104 | 44 | D | 100 | 144 | 64 | d | |||
5 | 5 | 05 | ENQ (询问) | 37 | 45 | 25 | % | 69 | 105 | 45 | E | 101 | 145 | 65 | e | |||
6 | 6 | 06 | ACK (确认) | 38 | 46 | 26 | & | 70 | 106 | 46 | F | 102 | 146 | 66 | f | |||
7 | 7 | 07 | BEL (响铃) | 39 | 47 | 27 | ' | 71 | 107 | 47 | G | 103 | 147 | 67 | g | |||
8 | 10 | 08 | BS (退格) | 40 | 50 | 28 | ( | 72 | 110 | 48 | H | 104 | 150 | 68 | h | |||
9 | 11 | 09 | HT (横向制表) | 41 | 51 | 29 | ) | 73 | 111 | 49 | I | 105 | 151 | 69 | i | |||
10 | 12 | 0a | LF (换行) | 42 | 52 | 2a | * | 74 | 112 | 4a | J | 106 | 152 | 6a | j | |||
11 | 13 | 0b | VT (纵向制表) | 43 | 53 | 2b | + | 75 | 113 | 4b | K | 107 | 153 | 6b | k | |||
12 | 14 | 0c | FF (换页) | 44 | 54 | 2c | , | 76 | 114 | 4c | L | 108 | 154 | 6c | l | |||
13 | 15 | 0d | CR (回车) | 45 | 55 | 2d | - | 77 | 115 | 4d | M | 109 | 155 | 6d | m | |||
14 | 16 | 0e | SO (移出) | 46 | 56 | 2e | . | 78 | 116 | 4e | N | 110 | 156 | 6e | n | |||
15 | 17 | 0f | SI (移入) | 47 | 57 | 2f | / | 79 | 117 | 4f | O | 111 | 157 | 6f | o | |||
16 | 20 | 10 | DLE (退出数据链) | 48 | 60 | 30 | 0 | 80 | 120 | 50 | P | 112 | 160 | 70 | p | |||
17 | 21 | 11 | DC1 (设备控制1) | 49 | 61 | 31 | 1 | 81 | 121 | 51 | Q | 113 | 161 | 71 | q | |||
18 | 22 | 12 | DC2 (设备控制2) | 50 | 62 | 32 | 2 | 82 | 122 | 52 | R | 114 | 162 | 72 | r | |||
19 | 23 | 13 | DC3 (设备控制3) | 51 | 63 | 33 | 3 | 83 | 123 | 53 | S | 115 | 163 | 73 | s | |||
20 | 24 | 14 | DC4 (设备控制4) | 52 | 64 | 34 | 4 | 84 | 124 | 54 | T | 116 | 164 | 74 | t | |||
21 | 25 | 15 | NAK (反确认) | 53 | 65 | 35 | 5 | 85 | 125 | 55 | U | 117 | 165 | 75 | u | |||
22 | 26 | 16 | SYN (同步空闲) | 54 | 66 | 36 | 6 | 86 | 126 | 56 | V | 118 | 166 | 76 | v | |||
23 | 27 | 17 | ETB (传输块结束) | 55 | 67 | 37 | 7 | 87 | 127 | 57 | W | 119 | 167 | 77 | w | |||
24 | 30 | 18 | CAN (取消) | 56 | 70 | 38 | 8 | 88 | 130 | 58 | X | 120 | 170 | 78 | x | |||
25 | 31 | 19 | EM (媒介结束) | 57 | 71 | 39 | 9 | 89 | 131 | 59 | Y | 121 | 171 | 79 | y | |||
26 | 32 | 1a | SUB (替换) | 58 | 72 | 3a | : | 90 | 132 | 5a | Z | 122 | 172 | 7a | z | |||
27 | 33 | 1b | ESC (退出) | 59 | 73 | 3b | ; | 91 | 133 | 5b | [ | 123 | 173 | 7b | { | |||
28 | 34 | 1c | FS (文件分隔符) | 60 | 74 | 3c | < | 92 | 134 | 5c | \ | 124 | 174 | 7c | | | |||
29 | 35 | 1d | GS (组分隔符) | 61 | 75 | 3d | = | 93 | 135 | 5d | ] | 125 | 175 | 7d | } | |||
30 | 36 | 1e | RS (记录分隔符) | 62 | 76 | 3e | > | 94 | 136 | 5e | ^ | 126 | 176 | 7e | ~ | |||
31 | 37 | 1f | US (单元分隔符) | 63 | 77 | 3f | ? | 95 | 137 | 5f | _ | 127 | 177 | 7f | DEL (删除) |
ASCII码表参考:https://zh.cppreference.com/w/cpp/language/ascii
五.字符串
C语言中使用双引号括起来的一串字符就被称为字符串,如:“abcdef”,就是一个字符串。
字符串的打印格式可以使用%s来指定,也可以直接打印如下:
六.\0
C语言字符串中一个特殊的知识,就是在字符串的末尾隐藏放着一个\0字符,这个\0字符是字符串的结束状态。
\0是字符串的结束标志。
验证\0的功能:
可以看出,arr1打印的结果在abc后还出现了一些随机值,是因为arr1在末尾没有\0字符作为结束标志,在打印的时候没有停止。arr2数组是使用字符串常量初始化的,数组中有\0作为结束标志,打印可以正常停止。
当在arr1数组中加上'\0'字符:
由此可见\0的作用和重要性。
七.转义字符
转义序列 | 描述 | 表示 |
---|---|---|
简单转义序列 | ||
\' | 单引号 | ASCII 编码中为字节 0x27 |
\" | 双引号 | ASCII 编码中为字节 0x22 |
\? | 问号 | ASCII 编码中为字节 0x3f |
\\ | 反斜杠 | ASCII 编码中为字节 0x5c |
\a | 响铃 | ASCII 编码中为字节 0x07 |
\b | 退格 | ASCII 编码中为字节 0x08 |
\f | 换页 | ASCII 编码中为字节 0x0c |
\n | 换行 | ASCII 编码中为字节 0x0a |
\r | 回车 | ASCII 编码中为字节 0x0d |
\t | 水平制表 | ASCII 编码中为字节 0x09 |
\v | 垂直制表 | ASCII 编码中为字节 0x0b |
数值转义序列 | ||
\nnn | 任意八进制值 | 代码单元 nnn |
\xn... | 任意十六进制值 | 代码单元 n... (任意数量的十六进制数字) |
通用字符名 | ||
\unnnn (C99 起) | 允许范围中的 Unicode 值 可能生成多个编码单元 | 码位 U+nnnn |
\Unnnnnnnn (C99 起) | 允许范围中的 Unicode 值 可能生成多个编码单元 | 码位 U+nnnnnnnn |
转义字符参考: https://zh.cppreference.com/w/c/language/escape
八.语句和语句分类
C语言的代码是由一条条的语句构成的,C语言中的语句可为以下五类:
空语句
#include <stdio.h>
int main()
{
;//空语句
return 0;
}
空语句,一般出现的地方是:这里需要一条语句,但是这个语句不需要做任何事,就可以写一个空语句。
表达式语句
表达语句就是在表达式的后面加分号。如下所示:
#include <stdio.h>
int main()
{
int a=20;
int b=0;
b=a+5;//表达式语句
return 0;
}
函数调用语句
复合语句
控制语句
C语言的基本概念就是这些,之后的内容会对C语言更深层次的内容进行探讨。