初识C语言
一、C语言是什么
1.1 概念
C语言是人和计算机交流的计算机语言。
举个例子:
人 -- 人 :汉语、英语、法语 --**自然语言**
人 -- 计算机: Java、C、C++ -- 计算机语言
1.2 编译和链接
C语言是编译型计算机语言,C语言原代码都是文本文件,本身无法运行,必须通过编译器翻译和链接器的链接,生成二进制的可执行的文件。下图演示了源程序经过编译器和链接器处理的过程
注:
1.每个源文件(.c)单独经过编译器处理生成对应的目标文件(obj.为后缀的文件)
2.多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)
1.3源文件和头文件的介绍
C语言把 .c 为后缀的文件称为源文件,把 .h 为后缀的文件称为头文件。
二、第一个C语言程序
#include <stdio.h>
int main()
{
printf("hello\n");
return 0;
}
在VS2022上按快捷键 Ctrl + F5 即可运行。
三、两个常用函数和库函数的介绍
1.main函数
C语言程序不管有多少行代码,都是从 main 函数开始执行的, main 函数是程序的入口,也被称为 主函数 。 main 前面的 int 表示 main 函数执行结束的返回类型—— 整型 。所以在 main 函数的最后写 return 0; 前后呼应。
main函数注意事项
- main函数是程序的入口
- main函数有且只有一个
main函数易错总结
- main被写成了 mian
- main后边的 () 漏掉了
- 代码中不能出现中文符号,比如中文括号和中文分号
- 一条语句结束后,要有分号
2.printf函数
上述代码中
printf("hello world\n")
使用了 printf 函数,实现了 打印 功能。
这里 printf 是一个 库函数 ,它的功能是在标准输出设备(一般指屏幕)上进行信息打印。
printf 函数可以打印很多类型的数据,比如:
int n = 100;
printf("%d\n",n); //100 -- 整型
printf("%c\n",'q‘); //q -- 字符
printf("$f\n",3.14); //3.140000 -- 单精度浮点型
这里的 ==%d== 、 ==%c== 和 ==%f== 都是 **占位符** ,会被后面的值替换。
**注意:printf函数需要包含头文件 stdio.h ,具体方法就是:
#include <stdio.h>
3.库函数
为了步再重复常见代码,让程序员提升开发效率,C语言规定一组函数,这些函数组成一个函数库,被称为 标准库 ,这些函数也被称为 库函数 。
一系列的库函数一般会声明在同一个头文件中,所以 库函数的使用,必须要包含对应的头文件 。
库函数比较多,可参考cplusplus网站
四、关键字介绍
关键字 也被称为 保留字
-
关键字都有特殊的意义,是留给C语言使用的
-
自己创建标识符时,不能和 关键字重复
-
关键字也是不能自己创建的
C语言的 32个关键字 如下
1 auto break case char const continue default do double else enum extern
2 float for goto if int long register return short signed sizeof static
3 struct switch typedef union unsigned void volatile while
注: 在C99标准中加入了 inline 、 restrict 、 _Bool 、 _Complex 、 _Imaginary 等关键字
五、字符和ASCII编码
我们知道在计算机中所有的数据都是以 二进制 的形式存储的,如果给这些字符编一个二进制序列,这个就叫做 编码 ,C语言中的字符遵循 ASCII 编码的方式
ASCII码表
ASCII码表不需要记忆,现用现查,网址:https://zh.cppreference.com/w/cpp/language/ascii
记住几组常见的数据:
- 字符A ~ Z的ASCII码值从65 ~ 90
- 字符a ~ z的ASCII码值从97 ~ 122
- 对应大小写字符的ASCII码值相差32(小写的大)
- 数字0 ~ 9的ASCII码值从48 ~ 57
- 换行 \n 的ASCII码值是 10
- ASCII码值从0 ~ 31 的32个字符是不可打印字符,无法打印在屏幕上观察
例:
单个字符的打印可用%c来指定格式
#include <stdio.h>
int main()
{
printf("%c\n",'Q');
printf("%c\n",81); //这里的81是字符Q的ASCII码值,打印Q
return 0;
)
可打印字符展示
#include <stdio.h>
int main()
{
int i = 0;
for (i = 32; i <=127 ;i++)
{
printf("%c ",i);
if (i % 16 == 15)
printf("\n");
}
return 0;
}
运行结果如下:
六、字符串和\0
6.1 字符串
使用 双引号 括起来的一 串 字符是 字符串 —— %s
使用 单引号 括起来的一 个 字符是 字符 ——%c
#include <stdio.h>
int main()
{
printf("%s\n", "hello C");
printf("hello C");
return 0;
}
6.2 \0
C语言字符串中一个特殊的知识,就是在字符串的末尾会隐藏 \0 ,这个 \0 字符就是字符串 结束标志 。
下面我门调试看一下
对于字符串”abcdef“,我们实际上看到了6个字符:a ,b ,c ,d ,e ,f ,但实际上在末尾还隐藏一个 \0 的转义字符, \0是 字符串结束的标志 。所以我们在使用库函数 printf() 打印字符串或 strlen() 计算字符串长度的时候,遇到 \0 的时候就 自动停止 了。
下面让我们来验证 \0 的功能
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c' }; // arr1数组中存放3个字符
char arr2[] = "abc"; // arr2数组中存放字符串
printf("%s\n", arr1);
printf("%s\n", arr2);
}
输出的结果为:
现在让我们调试看下什么情况
哦,原来arr1中没有 \0 来作为结束标注,所以输出玩abc后会继续往后输出,直到找到 \0 为止。
那如果我们单独在arr1中手动加入 \0,输出会不会发生改变呢
#include <stdio.h>
int main()
{
char arr1[] = { 'a','b','c','\0' }; // arr1数组中存放3个字符
char arr2[] = "abc"; // arr2数组中存放字符串
printf("%s\n", arr1);
printf("%s\n", arr2);
}
输出结果为:
果然,就是 \0 惹的祸!!!从上述可以看出 \0 的重要性
七、转义字符
转义字符 ,顾名思义,就是:转变原来的意思的字符。
下面让我们来几个例子
#include <stdio.h>
int main()
{
printf("abcndef\n");
printf("abc\ndef");
return 0;
}
输出结果为:
‘n’ 是一个字符,而 \n 是表示换行的意思。
C语言还有好多转义字符,具体如下:
- \? :在书写连续多个问号时使用,防止它们被解析成三字母词
- \’ :表示字符常量 ’
- \" :表示一个字符串内部的双引号
- \\ :用于表示一个反斜杠,防止被解释为一个转义字符
- \a :发出警报声或出现闪烁,或者同时发生
- \b :退格键,光标回退一个字符,但不删除字符
- \f :换页符,光标移动到下一页。(一般没用)
- \r :回车符,光标移动到同一行的开头
- \t :制表符,光标移动到下一个水平制表位,通常是下一个4/8的倍数
- \v :垂直分隔符,光标移动到下一个垂直指标为,通常是下一行的同一列
下面两种转义字符代表 8进制 和 16进制 表示形式:
- \ddd :d d d表示1 ~ 3个八进制的数字。 eg: \130 : 其实就是88,表示字符X
- \xdd :d d表示2个十六进制数字。 eg: \x30 :其实就是48,表示字符0
\0 :null字符,代表没有内容, \0 就是 \ddd 这类转义字符的一种,用于字符串的结束标志,其ASCII码值为0.