目录
1. C语言是什么?
2. C语言的历史和辉煌
3. 编译器的选择VS2022
3.1编译和链接
一个工程一般都会有多个源文件组成,每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件),多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)。 如下图所示
在VS2022上写代码,首先创建新项目---->创建空项目---->配置新项目----->在项目中可以在源文件内和头文件内添加新建项,源文件后缀为.c,头文件后缀为.h。
4. 第⼀个C语言程序
#include <stdio.h>
int main()
{
printf("hello world!\n");
return 0;
}
5. main函数
每个 C 语⾔程序不管有多少行代码,都是从 main 函数开始执行的, main 函数是程序的入口。main 前⾯的 int 表⽰ main 函数执⾏结束的时候返回⼀个整型类型的值。所以在 main 函数的最后写 return 0; 正好前后呼应。
- main函数是程序的入口
-
main函数有且仅有⼀个
-
即使⼀个项⽬中有多个.c⽂件,但是只能有⼀个main函数(因为程序的⼊⼝只能有⼀个)
6. printf和库函数
1. printf
#include <stdio.h>
int main()
{
int n = 10;
printf("hello world!\n");
printf("%d\n", n);//打印整型
printf("%c\n", 'q');//打印字符
printf("%lf\n", 3.14);//打印双精度浮点型
return 0;
}
用库函数时,要包含头文件,例如printf函数需要包含stdio.h这个头文件。如下
#include <stdio.h>
2.那什么是库函数呢?
7. 关键字介绍
- 关键字都有特殊的意义,是保留给C语言使用的
- 程序员自己在创建标识符的时候是不能和关键字重复的
- 关键字也是不能自己创建的。
8. 字符和ASCII编码
1. 字符
2.编码
每个字符编⼀个⼆进制序列,这个叫做编码
- 字符A~Z的ASCII码值从65~90
- .字符a~z的ASCII码值从97~122
- 对应大小写字符如a和A的ASCII码值差值为32
- 数字字符0~9的ASCII码值从48~57
- 换行\n的ASCII码值是:10
- 从0~31这32个字符是不可打印字符,无法在屏幕上观察。
单个字符打印可以使用%c来指定格式:
可打印字符展⽰:
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;
}
9. 字符串和\0
1. 字符串
#include <stdio.h>
int main()
{
printf("%s\n", "hello C");
printf("hello c");
return 0;
}
2. \0
C语⾔字符串中⼀个特殊的知识,就是在字符串的末尾隐藏放着⼀个 \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);
return 0;
}
从以上可知:arr1字符数组打印时,abc后面有随机值,是因为没有\0做结束标志。
arr2打印正常,因为arr2数组是使用字符串常量初始化,数组中有\0作为结束标志。
1 #include <stdio.h>
2
3 int main()
4 {
5 char arr1[] = {'a', 'b', 'c', '\0'};
6 char arr2[] = "abc";
7 printf("%s\n", arr1);
8 printf("%s\n", arr2);
9 printf("%s\n", "abc\0def");
10 return 0;
11 }
10. 转义字符
顾名思义:转变原来意思的字符。常用转义字符如下:
注:三字母词
??) 指 ]
??( 指 [
#include <stdio.h>
int main()
{
printf("%c\n", '\'');
printf("%s\n", "\"");
printf("c:\\test\\code\\test.c\n");
printf("\a");
printf("%c\n", '\130'); //130是8进制,转换成10进制是88,以88作为ASCII码值的字符是
printf("%c\n", '\x30'); //x30中的30是16进制,转换成10进制是48,以48作为ASCII码值的
return 0;
}
转义字符参考:https://zh.cppreference.com/w/c/language/escape
11. 语句和语句分类
• 控制语句
1. 空语句
#include <stdio.h>
int main()
{
;//空语句
return 0;
}
2. 表达式语句
#include <stdio.h>
int main()
{
int a = 20;
int b = 0;
b = a + 5; //表达式语句
return 0;
}
3. 函数调⽤语句
函数调⽤的时候,也会加上分号,就是函数调⽤语句
#include <stdio.h>
int Add(int x, int y)
{
return x+y;
}
int main()
{
printf("hehe\n");//函数调⽤语句
int ret = Add(2, 3);//函数调⽤语句
return 0;
}
4. 复合语句
复合语句其实就是前⾯讲过的代码块,成对括号中的代码就构成⼀个代码块,也被称为复合语句
#include <stdio.h>
void print(int arr[], int sz) //函数的⼤括号中的代码也构成复合语句
{
int i = 0;
for(i=0; i<sz; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int i = 0;
int arr[10] = {0};
for(i=0; i<10; i++) //for循环的循环体的⼤括号中的就是复合语句
{
arr[i] = 10-i;
printf("%d\n", arr[i]);
}
return 0;
}
5. 控制语句
12. 注释是什么?为什么写注释
注释可提高代码可读性。
/* 注释 */
/*
这也是一行注释
*/
int x=1;//这是一行注释
注意:
1.双引号里面的注释号,会成为字符串一部分,解释为普通符号,失去注释作用,则无论哪一种注释,都不能放在双引号里面。
printf("//hello /*world*/");
2.注释会被替换成⼀个空格,所以 min/* 这⾥是注释*/Value 会变成 min Value ,⽽不