初识C语言
一、C语言是什么1.1 概念1.2 编译和链接1.3源文件和头文件的介绍 二、第一个C语言程序三、两个常用函数和库函数的介绍1.main函数2.printf函数3.库函数 四、关键字介绍五、字符和ASCII编码六、字符串和\06.1 字符串6.2 \0 七、转义字符
一、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被写成了 mianmain后边的 () 漏掉了代码中不能出现中文符号,比如中文括号和中文分号一条语句结束后,要有分号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 extern2 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码值是 10ASCII码值从0 ~ 31 的32个字符是不可打印字符,无法打印在屏幕上观察例:
单个字符的打印可用%c来指定格式
#include <stdio.h>int main(){printf("%c\n",'Q');printf("%c\n",81); //这里的81是字符Q的ASCII码值,打印Qreturn 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语言还有好多转义字符,具体如下:
下面两种转义字符代表 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.