初识C语言
## C语言是什么?
人和人交流使用的是自然语言,如:汉语、英语、日语
那人和计算机是怎么交流的呢?使用计算机语言。
目前已知已经有上千种计算机语言,人们是通过计算机语言写的程序,给计算机下达指令,让计算机工作的。C语言就是众多计算机语言中的一种,当然C++/Java/Go/Python都是计算机语言。
编译和链接
以vs2022编译器为例
C语言是一门编译型计算机语言,C语言源代码都是文本文件,文本文件本身无法执行,必须通过编译器翻译和链接器的链接,生成二进制的可执行文件,可执行文件才能执行。C语言代码是放在.c 为后缀的文件中的,要得到最终运行的可执行程序,中间要经过编译和链接2个过程。
一个工程一般都会有多个源文件组成,如下图所示,演示了源程序经过编译器和链接器处理的过程。
注:
- 每个源文件(.c)单独经过编译器处理生成对应的目标文件(.obj为后缀的文件)
- 多个目标文件和库文件经过链接器处理生成对应的可执行程序(.exe文件)
编译器的对比
C语言是一门编译型的计算机语言,需要依赖编译器将计算机语言转换成机器能够执行的机器指令。
那我们常见的C语言编译器都有哪些呢?
比如:msvc、clang、gcc 就是一些常见的编译器,当然也有一些集成开发环境如:VS2022、XCode、CodeBlocks、DevC++、Clion等。
• VS2022 集成了MSVC(安装报包较大一些,安装简单,无需多余配置,使用起来非常方便)
• XCode 集成了clang(苹果电脑上的开发工具)
• CodeBlocks 集成了gcc(这个工具比较小众,需要配置环境,不太推荐)
• DevC++ 集成了gcc(小巧,但是工具过于简单,对于代码风格的养成不好,一些竞赛使用)
• Clion 是默认使用CMake,编译器是可以配置的(工具是收费,所以暂时推荐大家使用)
这里推荐各位安装vs2022的社区版学习,去比特鹏哥
VS2022的安装教程:https://www.bilibili.com/video/BV11R4y1s7jz/
且无脑式安装,默认界面是中文的,对初学者友好!!!
VS项目和源文件、头文件介绍
在VS上写代码,我们是需要创建项目的,直接新建项目就可以了。
在项目中就可以添加源文件和头文件。
C语言把.c 为后缀的文件称为源文件,把.h 为后缀的文件称为头文件。
为什么创建c文件时显示的是cpp后缀?
原因:
创建源文件时没有在后面添加.c,vs默认的是cpp文件。因此创建时想要有.c文件,必须要加上.c
例如创建testC语言文件:
main函数
每个 C 语言程序不管有多少行代码,都是从main 函数开始执行的, main 函数是程序的入口,
main 函数也被叫做:主函数。main 前面的int 表示 main 函数执行结束的时候返回一个整型类
型的值。所以在main 函数的最后写return 0; 正好前后呼应。
• main函数是程序的入口
• main函数有且仅有一个
• 即使一个项目中有多个.c文件,但是只能有一个main函数(因为程序的入口只能有一个)
*字符串和\0
C语言中如何表示字符串呢?使用双引号括起来的一串字符就被称为字符串,如:“abcdef”,就是一个
字符串。
字符串的打印格式可以使用 %s 来指定,也可以直接打印如下:
#include <stdio.h>
int main()
{
printf("%s\n", "hello C");
printf("hello c");
return 0;
}
C语言字符串中一个特殊的知识,就是在字符串的末尾隐藏放着一个\0 字符,这个\0 字符是字符串的结束标志。
对于字符串"abcdef",我们实际上看到了6个字符:a,b,c,d,e,f,但是实际上在末尾还隐藏一个\0 的转义字符, \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 字符作为结束标志,在打印的时候没有停止。但是arr2 的打印就是完全正常的,就是因为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;
}
学习C语言是一个系统的过程,以下是学习C语言的总结:
-
理解计算机语言:首先,要了解计算机语言是人与计算机交流的工具,C语言是其中一种高效且广泛使用的计算机语言。
-
掌握编译和链接过程:学习C语言需要理解源代码如何通过编译器编译成目标代码,以及如何通过链接器链接成可执行文件。
-
熟悉编译器和IDE:了解并选择一个合适的编译器和集成开发环境(如VS2022),这对于编写、编译和调试C程序至关重要。
-
项目和文件结构:熟悉如何在IDE中创建和管理项目,理解源文件(.c)和头文件(.h)的作用和区别。
-
编写main函数:掌握如何编写main函数,它是C程序的入口点。
-
字符串处理:学习如何在C语言中处理字符串,包括字符串的声明、初始化、打印和字符串结束标志\0的使用。
-
实践编程:通过编写和运行实际的C程序来加深理解,实践是学习编程的最佳方式。
-
阅读和分析代码:阅读别人的代码,理解其结构和逻辑,可以提高编程技巧。
调试技能:学会使用IDE的调试工具来查找和修复代码中的错误。
持续学习:C语言和编程领域不断更新,持续学习新的知识和技术是必要的。