第1讲:C语言常见概念

发布于:2025-07-11 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

一、什么是C语言?

二、C语言的历史与成就

三、编译器选择(VS2022)

1、编译与链接

2、编译器对比

3、VS2022的优缺点

四、VS项目与源文件、头文件介绍

五、第一个C语言程序

六、main函数

七、printf和库函数

八、关键字介绍

九、字符与ASCII编码

十、字符串与空字符

十一、转义字符

十二、语句和语句分类

1、空语句

2、表达式语句

3、函数调用语句

4、复合语句

5、控制语句

十三、注释是什么?为什么要写注释?

1、注释的两种形式

/* */形式

双斜杠//

2、注释替换规则

十四、VS2022创建项目步骤

第一步:点击创建新项目

第二步:选择空项目,然后下一步

第三步:填写项目名称和路径

第四步:项目创建完成

第五步: 新建源文件过程

第六步:显示所有模版并成功新建.c源文件


一、什么是C语言?

  • 人与人交流使用的是自然语言,比如汉语、英语、日语等。
  • 那么人与计算机如何沟通呢?答案是通过计算机语言。
  • 目前已知的计算机语言已有上千种。人们通过编写计算机程序来给计算机下达指令,使其完成特定工作。
  • C语言就是众多计算机语言中的一种,其他常见的还有C++、Java、Go、Python等。

二、C语言的历史与成就

C语言最初是为开发Unix操作系统而发明的工具。

摘要:TIOBE 指数 - TIOBE

2025 年 6 月的 TIOBE 指数:

        TIOBE 编程社区指数是衡量编程受欢迎程度的指标 语言。该指数每月更新一次。评级基于 全球技术娴熟的工程师、课程和第三方供应商。热门网站 Google、Amazon、Wikipedia、Bing 和其他 20 多个网站用于计算评级。 需要注意的是,TIOBE 指数并不是关于最好的编程语言或语言 其中编写了大部分代码行

        该索引可用于检查您的编程技能是否仍然是最新的,或者创建 关于在开始构建新的 软件系统。TIOBE 指数的定义可以在这里找到。


三、编译器选择(VS2022)

1、编译与链接

  • C语言作为一门编译型计算机语言,其源代码以文本文件形式存在。
  • 这些文本文件本身不可直接执行,需要通过编译器进行翻译并由链接器完成链接,最终生成二进制可执行文件才能运行。
  • C语言代码通常存储在以.c为后缀的文件中。要将其转换为可执行程序,需要经过编译和链接两个关键步骤。

一个工程通常由多个源文件组成。下图展示了源程序经过编译器和链接器处理的过程:

注意:

  1. 编译器将每个源文件(.c)单独编译,生成对应的目标文件(.obj后缀文件)

  2. 链接器将多个目标文件与库文件组合,最终生成可执行程序(.exe文件)

这就是Windows系统下C语言程序生成.exe可执行文件的完整流程。

2、编译器对比

  • C语言是一门编译型计算机语言,需要通过编译器将源代码转换为机器可执行的指令。
  • 常见的C语言编译器包括msvc、clang和gcc等。
  • 此外,还有一些集成开发环境(IDE)如VS2022、XCode、CodeBlocks、DevC++和Clion等,它们内置了这些编译器。
  • 集成开发环境(IDE)是为程序开发提供完整环境的应用程序,通常包含代码编辑器、编译器、调试器和图形用户界面等工具。
  • 这些IDE整合了代码编写、分析、编译和调试等功能,提供了一整套开发软件服务。

综合推荐:建议安装VS2022社区版(免费、操作简便、行业主流工具)

📎 VS2022安装教程:VS2022安装使用教程,VS2022使用教程Visual Studio 2022详细安装使用调试教程C语言编译器C++编译器VS2022使用教程C语言软件安装_哔哩哔哩_bilibili

3、VS2022的优缺点

优点:

  • 作为主流集成开发环境,VS2022在企业中应用广泛
  • 集编辑器、编译器和调试器于一体,功能全面
  • 安装即用,基本无需额外配置,易于上手
  • 默认中文界面,对初学者十分友好

缺点:

  • 功能丰富导致安装包较大,占用较多存储空间

四、VS项目与源文件、头文件介绍

        在VS中进行开发时,需要先创建项目(直接新建项目即可)。项目创建后,可添加源文件和头文件,C语言把:

  • 源文件:以.c为后缀
  • 头文件:以.h为后缀


五、第一个C语言程序

#include <stdio.h>

int main() 
{
    printf("hello C\n");
    return 0;
}

在VS2022中创建项目、编写C代码并运行:

在VS2022中运行代码的快捷键是:Ctrl+F5。


六、main函数

  • 任何C语言程序都从main函数开始执行,无论代码量有多少。
  • main函数是程序的唯一入口,也被称为主函数。
  • 函数前的int表明main函数执行完毕后会返回一个整型值,因此在函数末尾使用"return 0;"与之呼应。

关于main函数的关键点:

  • 程序有且仅有一个main函数
  • 即使项目包含多个.c文件,也只能有一个main函数(程序入口唯一)

初学者常见错误:

  • 将main误写为mian
  • 遗漏main后面的括号()
  • 使用中文符号(如括号、分号)
  • 语句结尾未加分号

七、printf和库函数

在上文示例代码中,我们使用了printf函数:

printf("hello C\n");

        printf是一个标准库函数,用于在标准输出设备(通常是屏幕)上显示信息。使用时只需将需要输出的字符串用双引号括起来作为参数传入即可。

printf不仅能输出字符串,还可以打印多种数据类型:

int n = 100;
printf("%d\n", n);    // 打印整型
printf("%c\n", 'q');  // 打印字符
printf("%lf\n", 3.14);// 打印双精度浮点型

其中%d、%c等是格式占位符,将被后续的实际值替代(后续会详细讲解)。

使用库函数时需要包含相应头文件,例如printf需要:

#include <stdio.h>

关于库函数:

        C语言标准定义了一组常用函数的规范,由编译器厂商实现并提供给开发者使用,这些函数统称为标准库函数,这些函数组成了⼀个函数库,被称为标准库,某些编译器厂商可能还会提供额外的扩展函数(不一定被其他编译器支持)。

同类型的库函数通常声明在同一个头文件中,因此使用时需要包含对应的头文件。

更多库函数信息可参考:cplusplus.com/reference/clibrary/


八、关键字介绍

        C语言中有一组具有特殊含义的保留符号,如int、if、return等,这些符号被称为关键字或保留字。关键字的特性包括:

  • 具有特定功能,专为C语言设计
  • 不能用作程序员自定义的标识符
  • 无法由用户自行创建

C语言包含32个基本关键字:

补充说明:

  1. C99标准新增了inline、restrict、_Bool、_Complex、_Imaginary等关键字
  2. 实际开发中最常用的仍是上述32个基础关键字
  3. 完整关键字说明可参考:C keywords - cppreference.com

这些常用关键字将在后续中逐步讲解。


九、字符与ASCII编码

        在键盘上输入的各种符号(如a、q、@、#等)都被称为字符。在C语言中,字符需要用单引号括起来表示,例如'a'、'b'、'@'等。

        由于计算机中的所有数据都以二进制形式存储,这些字符在内存中也需要对应的二进制表示。如果每个人都自行定义字符的二进制编码,就会造成通信混乱。为此,美国国家标准学会(ANSI)制定了统一的ASCII编码标准。C语言中的字符编码正是遵循了这一标准。

以下是ASCII编码表: ASCII Chart - cppreference.com

虽然不需要记忆整个ASCII码表,但掌握几组关键数据会很有帮助:

  • 大写字母A-Z对应65-90
  • 小写字母a-z对应97-122
  • 大小写字母的ASCII差值恒为32(如'A'与'a')
  • 数字0-9对应48-57
  • 换行符\n的ASCII值为10
  • 0-31为不可打印的控制字符,无法打印在屏幕上观察

单个字符的打印可以使用%c来指定格式:

#include <stdio.h>
int main() 
{
    printf("%c\n", 'Q');  // 直接输出字符
    printf("%c\n", 81);   // 通过ASCII码输出
    return 0;
}

可打印字符展示(32-126):

#include <stdio.h>
int main() 
{
    for(int i=32; i<127; i++) 
    {
        printf("%c ", i);
        if(i%16 == 15) printf("\n");
    }
    return 0;
}


十、字符串与空字符

        在C语言中,字符串是通过双引号括起来的一串字符来表示的。例如:"abcdef"就是一个字符串。字符串的打印可以使用%s格式符,也可以直接输出:

#include <stdio.h>
int main() 
{
    printf("%s\n", "hello C");
    printf("hello c");
    return 0;
}

        C语言字符串有一个重要特性:每个字符串末尾会自动包含一个隐藏的'\0'字符,这个空字符标志着字符串的结束。

观察VS2022的监视窗口:

        在字符串"abcdef"中,我们直观看到的是6个字符:a、b、c、d、e、f。但实际上字符串末尾还包含一个隐藏的转义字符\0,它是字符串的结束标志。正是因为这个特性,当使用库函数如printf()打印字符串或strlen()计算字符串长度时,遇到\0就会自动停止操作。

在C语言中,字符串也可以存储在字符数组中。下面通过代码演示\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和arr2的内容差异:

运行结果:

        当打印 arr1 字符数组时,输出完 a、b、c 后会出现随机值,这是因为 arr1 末尾缺少 \0 作为结束标志,导致无法正常终止,直到找到\0为止。而 arr2 数组使用字符串常量初始化时自动包含 \0 标志,因此打印能正常停止。

如果在 arr1 数组中手动添加 \0 字符会怎样呢?

#include <stdio.h>
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;
}

从三次打印结果可以看出,输出都在遇到 '\0' 时终止。这个例子清楚地展示了 '\0' 的重要作用。


十一、转义字符

        在前面的代码中,你可能遇到过 \n\0 这样的特殊符号。这些都属于转义字符,顾名思义就是能够改变字符原本含义的特殊字符。举个简单例子,字符 'n' 在字符串中会正常显示,但当我们使用 \n 时,它的含义就发生了变化:

#include <stdio.h>
int main() 
{
    printf("abcndef");
    return 0;
}

程序运行后将输出以下结果:

如果我们在代码中进行调整,在变量 n 前面添加反斜杠 \,修改后的代码如下:

#include <stdio.h>
int main() 
{
    printf("abc\ndef");
    return 0;
}

输出的结果: 

        修改前后的代码输出结果截然不同,这是为什么呢?关键在于转义字符的作用。\n 是一个表示换行的转义字符,可以理解为反斜杠 \ 改变了字母 n 的原有含义——原本普通字符 n 被转义为具有换行功能。

在 C 语言中,类似的转义字符还有以下几种:

转义字符 说明 示例/备注
\n 换行符 光标移动到下一行行首
\? 连续问号转义 防止被解析为三字母词(现代编译器基本不需要)
\' 单引号字符 用于字符常量中:char c = '\'';
\" 双引号字符 用于字符串内部:"He said, \"Hello\""
\\ 反斜杠字符 表示路径时:"C:\\Windows\\System"
\a 警报符 触发系统提示音或闪烁(ASCII 7)
\b 退格符 光标回退一格(ASCII 8),不删除内容
\f 换页符 原始设计用于打印机换页,现代终端行为类似\v
\r 回车符 光标返回行首(常用于Windows换行\r\n
\t 水平制表符 跳到下一个制表位(通常4/8字符间隔)
\v 垂直制表符 光标移动到下一行同列位置

有两种转义字符可以理解为字符的八进制或十六进制表示形式:

  • \ddd:由1-3位八进制数字组成。例如:\130表示字符X
  • \xdd:由2位十六进制数字组成。例如:\x30表示字符0

其中,\0表示null字符,代表空内容。它属于\ddd这类转义字符,常用于字符串结束标志,其ASCII码值为0。

代码示例:

#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码值的字符是'X' 
    printf("%c\n", '\x30');     //x30中的30是16进制,转换成10进制是48,以48作为ASCII码值的字符是'0'
    
    return 0;
}

  1. 这些ASCII码值可以通过编写代码自行验证
  2. 我们需要理解转义字符的概念,并能在字符串中正确识别
  3. 转义字符参考文档:Escape sequences - cppreference.com

十二、语句和语句分类

C语言代码由一系列语句构成,可分为以下五类:

  • 空语句
  • 表达式语句
  • 函数调用语句
  • 复合语句
  • 控制语句

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++) 
    { 
        //循环体构成复合语句
        arr[i] = 10-i;
        printf("%d\n", arr[i]);
    }
    return 0;
}

5、控制语句

        控制语句用于控制程序执行流程,实现程序的不同结构(顺序结构、选择结构、循环结构)。C语言共有9种控制语句,可分为三类:

  1. 条件判断语句(分支语句):if语句、switch语句;
  2. 循环执行语句:do-while语句、while语句、for语句;
  3. 转向语句:break语句、goto语句、continue语句、return语句。

后续章节将详细介绍这些控制语句。


十三、注释是什么?为什么要写注释?

        注释是对代码的解释说明,编译器会忽略这部分内容,因此注释不会影响代码的实际运行。其主要目的是帮助程序员(包括自己和其他开发者)更好地理解代码。

        优秀的注释应当简明扼要,既不能过度注释(避免写无意义的说明),也不能完全不写(否则会给后续代码维护带来困难)。适当地添加必要注释不仅能体现开发者的专业素养,在求职面试时,规范的注释习惯也会给面试官留下良好印象。

VS2022注释与去注释快捷键如下:

1、注释的两种形式

C语言支持两种注释方式:

/* */形式

这种注释可以跨越多行,格式如下:

/* 单行注释 */
/* 
多行
注释 
*/

也可用于行内注释:

int fopen(char* s /* 文件名 */, int mode);

        在上面的示例中,/* file name */用于说明函数参数,后续代码仍然会正常执行。需要注意的是:这种注释必须包含结束符号*/,否则可能导致错误。

printf("a "); /* 注释一
printf("b ");
printf("c "); /* 注释二 */
printf("d ");

        本示例中,原意是在第一行和第三行代码尾部各有一个注释。但由于第一行注释漏写了结束符号,导致注释一的范围一直延续到第三行结束(观察代码中高亮与不高亮的部分)。

注意事项:

  1. 必须成对使用/**/,否则会导致注释范围错误
  2. 不支持嵌套注释,遇到第一个*/就会结束注释块
  3. 编译时注释会被替换为一个空格,例如min/*注释*/Value会变成min Value

双斜杠//

        第二种方式是使用双斜杠//进行注释,从//开始到行尾的内容都属于注释。这种注释仅限于单行,既可以独立成行,也可以跟在代码语句后面。这是C99标准新增的语法。

示例:

// 这是单行注释
int x = 1; // 语句后的注释

        需要注意的是,所有类型的注释都不能出现在双引号内。双引号内的注释符号会被视为字符串的一部分,失去注释功能。

示例:(观察代码中高亮部分,代码中并无不高亮部分,意思是注释不起作用)

printf("// hello /* world */ ");

上述示例中,双引号内的所有注释符号都被当作普通字符处理。

2、注释替换规则

编译器会将注释替换为一个空格。例如:

min/* 注释 */Value

将被处理为min Value,而不是minValue 


十四、VS2022创建项目步骤

第一步:点击创建新项目

第二步:选择空项目,然后下一步

第三步:填写项目名称和路径

第四步:项目创建完成

如果没有左边方框的内容就点击视图找到解决方案资源管理器:

第五步: 新建源文件过程

第六步:显示所有模版并成功新建.c源文件

小知识:C++叫c plus plus或者cpp;C++代码的文件后缀是.cpp

 


网站公告

今日签到

点亮在社区的每一天
去签到