[C.C++] 别再瞎学!C 语言入门看这篇就够了

597 0
Honkers 2025-3-5 16:37:54 | 显示全部楼层 |阅读模式

目录

1. 如何学好C语言

2. C语言是什么?

3. C语⾔的历史和辉煌

4. 编译器的选择

4.1 编译和链接

4.2 编译器大比拼,VS2022 脱颖而出

4.3 VS2022 优缺点大揭秘

5. VS项⽬ 和 源⽂件、头⽂件介绍

 6. 第一个C语言程序

7. main 函数:程序的 “大管家”

8. printf 和库函数 

8.1 printf

8.2 那什么是库函数呢?

9. 关键字的介绍

10.字符和 ASCII 编码 

11. 字符串和 \0

12. 转义字符

13.语句分类 

14. 注释 

    在编程的世界里,C 语言就像是一位低调却实力超强的武林高手,看似朴实无华,实则内功深厚。它不仅是很多其他编程语言的 “前辈”,还在操作系统、嵌入式开发等众多领域有着不可替代的地位。今天,咱们就一起揭开 C 语言的神秘面纱,看看它到底有啥魅力!

【声明】:第一章节只是简单介绍C语言的一些基本概念以及C语言的开发环境,在接下来的两个多月里,博主将持续更新C语言模块,由0基础到进阶层层递进。加油吧!各位铁汁们,上天一定会眷顾各位努力的铁汁们,相信在不久的未来,各位铁汁们都能够进入到心仪的公司去继续提升自己。

1. 如何学好C语言

    在编程领域,C 语言堪称万物之源,是长远 IT 职业发展的上佳之选。作为母体语言,它是人机交互接近底层的关键桥梁。回顾 IT 行业,大致每 10 年就会经历一次变革,然而在长达 40 年的时间里,C/C++ 在 TIOBE 排行榜中始终稳居前三,地位坚如磐石,可谓是经典永不过时。

    若想学好一门计算机语言,努力是必不可少的要素。倘若总是循规蹈矩,走和他人相同的学习路径,又怎能脱颖而出呢?所以,需要付出与众不同的努力。

    时间如同海绵里的水,只要你愿意去挤,总会有的。在学习 C 语言的过程中,遇到问题应先尝试自行解决,若实在无法攻克,再借助 AI 软件查询。

    学好编程,绝不仅仅是掌握一门语言这么简单,还需深入学习数据结构、计算机网络、操作系统等相关知识。在闲暇时光,阅读一些计算机领域的优质书籍,有助于修炼 “内功”,让自己对知识的掌握更加精湛。

    最主要的一点,多敲代码,多敲代码,多敲代码!!!重要的事情说三遍,想要算法写的好,唯手熟尔。

2. C语言是什么?

    咱们日常交流用的是汉语、英语这些自然语言,那人和计算机交流靠什么呢?答案就是计算机语言。C 语言就是众多计算机语言中的一员,像我们熟悉的 C++、Java、Python 等也都属于这个大家族。它就像是计算机能听懂的 “方言”,通过编写 C 语言程序,我们就能给计算机下达指令,让它乖乖干活。

3. C语⾔的历史和辉煌

C 语⾔最初是作为 Unix 系统的开发⼯具⽽发明的

4. 编译器的选择

4.1 编译和链接
    C语⾔是⼀⻔编译型计算机语⾔,C语⾔源代码都是⽂本⽂件,⽂本⽂件本⾝⽆法执⾏,必须通过编译器翻译和链接器的链接,⽣成⼆进制的可执⾏⽂件,可执⾏⽂件才能执⾏。     C语⾔代码是放在 .c 为后缀的⽂件中的,要得到最终运⾏的可执⾏程序,中间要经过编译和链接2个过程。     简单来说,编译就是把我们写的代码翻译成计算机能懂的 “机器语言”,每个以.c 为后缀的源文件会单独被编译器处理,生成对应的目标文件(.obj 后缀)。然后,链接器会把这些目标文件和库文件 “组装” 起来,生成最终的可执行程序(.exe 文件),这就好比把各种零件组装成一台能正常运转的机器。

    ⼀个⼯程⼀般都会有多个源⽂件组成,如下图所⽰,演⽰了源程序经过编译器和链接器处理的过程。(图有点粗糙,凑合着看吧)

   这就是,在Windows电脑上C语⾔程序⽣成的exe可执⾏⽂件

4.2 编译器大比拼,VS2022 脱颖而出

    常见的 C 语言编译器有 msvc、clang、gcc 等,还有像 VS2022、XCode、CodeBlocks、DevC++、Clion 这些集成开发环境(IDE)。这些 IDE 把代码编辑器、编译器、调试器、链接器等工具集成在一起,方便我们开发。

    VS2022 集成了 MSVC,它安装起来很简单,不用额外配置环境,直接就能上手,对咱们初学者特别友好,而且它在企业里也用得很普遍。

    XCode 主要在苹果电脑上用,集成了 clang;

    CodeBlocks 和 DevC++ 都集成了 gcc,不过 CodeBlocks 需要配置环境,不太适合新手,DevC++ 虽然小巧,但功能相对简单,更适合竞赛使用。

    Clion 默认用 CMake,编译器能自己配置,但是要收费。综合考虑,VS2022 社区版是咱们学习 C 语言的绝佳选择。

4.3 VS2022 优缺点大揭秘

    VS2022 的优点可不少,它功能强大,编辑器、编译器、调试器、链接器一应俱全,就像一个编程 “大礼包”。安装好就能用,基本不用操心环境配置的问题,而且默认界面是中文的,对咱们来说很友好。

    不过,它也有个小缺点,就是功能太丰富,导致安装包比较大,占用的空间多。但总体来说,瑕不掩瑜,还是很值得安装的。

整体考虑,推荐⼤家安装 VS2022 的社区版本学习,免费,使⽤⽅便,⼯作中常⻅。 VS2022 的安装教程: https://www.bilibili.com/video/BV11R4y1s7jz/      (鹏哥同时也是我的C语言导师,记得我最初学C语言找了很多资料和课程,但是都学不进去,有一次打开鹏哥的课程后,我好想有了启发似得,对学C语言的热情一发不可收拾,在这里感谢比特鹏哥,同时大家想学习C语言的铁汁们也可以选择去看鹏哥哔站上的C语言课程,包能学会的)

5. VS项⽬ 和 源⽂件、头⽂件介绍

    在 VS2022 里写代码,得先创建项目,这就好比盖了一栋房子。项目建好后,就能在里面添加源文件(.c 后缀)和头文件(.h 后缀)了。源文件是存放 C 语言代码的地方,是程序的 “核心战场”;头文件则像是一个 “工具库”,里面放着函数声明、宏定义等内容,方便在不同的源文件里使用。

 6. 第一个C语言程序

  1. #include<stdio.h>
  2. int main()
  3. {
  4. printf("Hello World\n");
  5. return 0;
  6. }
复制代码

    这就是我们的第一个 C 语言程序啦!代码里,#include 是把标准输入输出头文件 “请” 进来,这样我们就能使用里面的函数了。printf函数的作用是在屏幕上打印信息,这里它会输出 “Hello World”。main函数是程序的入口,程序从这里开始执行,最后return 0表示程序正常结束。在 VS2022 里,按下 Ctrl + F5 快捷键,就能看到程序运行的结果啦,是不是很有成就感?

7. main 函数:程序的 “大管家”

    每个 C 语言程序都有且只有一个main函数,我们称他为主函数,它是程序的入口,就像房子的大门,程序从这里开始 “起航”。main前面的int表示这个函数执行结束后会返回一个整型值,所以在函数最后写return 0,这是一种规范的写法。

    初学者常见的错误总结:

    1.把main写mian

    2.main后面的括号丢掉

    3.代码中的符号都是英文符号

    4.每条语句后面都会有一个 ;

8. printf 和库函数 

8.1 printf

    在前面的代码里,printf函数帮我们实现了信息打印。它是一个库函数,功能是在标准输出设备(一般就是屏幕上)打印信息。除了打印字符串,它还能打印各种类型的数据。

  1. int n = 100;
  2. printf("%d\n", n); // 打印整型
  3. printf("%c\n", 'q'); // 打印字符
  4. printf("%lf\n", 3.14); // 打印双精度浮点型
复制代码

    这些不同的数据类型我们第一节先不具体讲解。

    这里的%d、%c、%lf等是占位符,会被后面相应的值替换。使用库函数的时候,别忘了包含对应的头文件,比如用printf函数就得加上#include 。库函数是 C 语言标准规定的一组函数,由不同的编译器厂商按照标准实现,提供给程序员使用,就像是一套现成的工具,能帮我们提高开发效率。

8.2 那什么是库函数呢?
   为了不再重复实现常⻅的代码,让程序员提升开发效率,C语⾔标准规定了⼀组函数,这些函数再由不 同的编译器⼚商根据标准进⾏实现,提供给程序员使⽤。这些函数组成了⼀个函数库,被称为标准 库,这些函数也被称为库函数。在这个基础上⼀些编译器⼚商可能会额外扩展提供部分函数(这些函 数其他编译器不⼀定⽀持)。 ⼀个系列的库函数⼀般会声明在同⼀个头⽂件中,所以库函数的使⽤,要包含对应的头⽂件。 库函数⽐较多,后期慢慢来介绍,提前了解可参考链接:    https://cplusplus.com/reference/cstring      

9. 关键字的介绍

    C语⾔中有⼀批保留的名字的符号,⽐如: int 、 if 、 return ,这些符号被称为保留字或者关键

字。

    C语言常见的关键字有32个,在后续的学习中,我们会慢慢熟悉它们的用法。

  1. auto break case char const continue default do double else enum
  2. extern float for goto if int long register return short signed sizeof
  3. static struct switch typedef union unsigned void volatile while
复制代码
    关键字都有特殊的意义,是保留给C语⾔使⽤的     程序员⾃⼰在创建标识符的时候是不能和关键字重复的     关键字也是不能⾃⼰创建的     注:在C99标准中加⼊了 inline 、   restrict 、 _Bool 、 _Complex 、 _Imaginary 等关键字。     ⼀些关键字⼤家可以去了解⼀下,不过使⽤最多的还是上⾯的32个关键字。     注: https://zh.cppreference.com/w/c/keyword (C语⾔关键字的全部介绍)

   

    在后续的学习中,我们会慢慢熟悉它们的用法。

10.字符和 ASCII 编码 

    在键盘上敲出的各种符号,像a、@等,在 C 语言里都是字符,用单引号括起来表示,比如'a'、'@'。计算机里所有的数据都是以二进制形式存储的,字符也不例外。为了统一标准,方便大家交流,美国国家标准学会(ANSI)制定了 ASCII 编码,C语言中的字符就遵循ASCII编码的方式。

参考:https://zh.cppreference.com/w/cpp/language/ascii 我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据: 字符A~Z的ASCII码值从65~90   字符a~z的ASCII码值从97~122   对应的⼤⼩写字符(a和A)的ASCII码值的差值是32   数字字符0~9的ASCII码值从48~57   换⾏ \n 的ASCII值是:10   在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察  

神奇吧,哈哈哈哈,a对应的码值刚好是97,打印出来一模一样

11. 字符串和 \0

    在 C 语言里,用双引号括起来的一串字符就是字符串,比如"abcdef"。打印字符串可以用%s指定格式,也能直接打印。这里有个重要的知识点,字符串末尾会隐藏一个\0字符,它是字符串的结束标志。

字符串的两种打印方式

    下面是 VS2022 的监视窗口,它需要在调试状态下才能打开,主要用于观察代码执行过程中变量等状态的变化。在调试时,我们通过监视窗口观察到,创建了两个数组,第一个数组存储的是'a' 'b' 'c' ,第二个数组存储的是'a' 'b' 'c' '\0'。由此,我们可以验证字符串末尾隐藏着\0 这一特性。在监视窗口中,数组会以特定的形式展示元素,方便我们直观地对比这两个数组的差异。

下面我们执行一下这段代码 

    运行上述代码后,我们会发现一个有趣的现象。在输出结果中,第一行出现了 “烫烫烫” 这样奇怪的内容,而第二行则正常输出了 “abc”。为什么会这样呢?

    这就要提到%s的打印规则了。%s在打印字符串时,遇到\0就会停止打印。对于arr数组,我们是以字符形式初始化{'a','b','c'},并没有自动添加字符串结束符\0。所以当使用%s打印arr时,它会一直往后寻找\0,直到在后续内存空间中碰到一个\0才停止。而后续未初始化的内存空间中的值是随机的,在 Visual Studio 环境下,这些随机值打印出来就呈现为 “烫烫烫”。

    反观arr1数组,我们使用字符串常量"abc"进行初始化,在 C 语言中,字符串常量末尾会自动添加\0。因此,%s在打印arr1时,能够正常识别到末尾的\0,从而正确输出 “abc”。

    在实际的 C 语言编程中,正确处理字符串结束符\0至关重要。如果忽略了它,可能会导致字符串操作出现错误,比如越界访问内存,进而引发程序崩溃等严重问题。

12. 转义字符

    在 C 语言里,有一些特殊的字符,它们叫转义字符,能改变原来字符的意思。比如说\n,它表示换行。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("abc\ndef");
  5. return 0;
  6. }
复制代码

     运行这段代码,输出的结果是 “abc” 和 “def” 分在两行,这就是\n的作用。除了\n,还有很多转义字符 。

  1. C语⾔中像这样的转义字符还有⼀些,具体如下:
  2. \? :在书写连续多个问号时使⽤,防⽌他们被解析成三字⺟词,在新的编译器上没法验证了。
  3. \' :⽤于表⽰字符常量'
  4. " :⽤于表⽰⼀个字符串内部的双引号
  5. \\ :⽤于表⽰⼀个反斜杠,防⽌它被解释为⼀个转义序列符。
  6. \a :警报,这会使得终端发出警报声或出现闪烁,或者两者同时发⽣。
  7. \b :退格键,光标回退⼀个字符,但不删除字符。
  8. \f :换⻚符,光标移到下⼀⻚。在现代系统上,这已经反映不出来了,⾏为改成类似于 \v 。
  9. \n :换⾏符。
  10. \r :回⻋符,光标移到同⼀⾏的开头。
  11. \t :制表符,光标移到下⼀个⽔平制表位,通常是下⼀个4/8的倍数。
  12. \v :垂直分隔符,光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。
  13. 下⾯2种转义字符可以理解为:字符的8进制或者16进制表⽰形式
  14. \ddd :d d d表⽰1~3个⼋进制的数字。 如: \130 表⽰字符X
  15. \xdd :d d表⽰2个⼗六进制数字。 如: \x30 表⽰字符0
  16. \0 :null 字符,代表没有内容, \0 就是 \ddd 这类转义字符的⼀种,⽤于字符串的结束标志,其
  17. ASCII码值是0.
复制代码

这些ASCII码值是可以⾃⼰写代码验证的,⼤家也可以⾃⼰验证。

转义字符参考:https://zh.cppreference.com/w/c/language/escape 

13.语句分类 

    C 语言的代码是由一条条语句组成的,主要分为五类:空语句、表达式语句、函数调用语句、复合语句和控制语句。

  • 空语句:最简单的空语句就是一个分号,虽然它啥也不做,但在某些特定的地方很有用,比如当程序需要一条语句占位,但又不需要执行具体操作时,就可以用空语句。
    1. #include <stdio.h>
    2. int main()
    3. {
    4. ;//空语句
    5. return 0;
    6. }
    复制代码
  • 表达式语句:在表达式后面加上分号就构成了表达式语句,比如int a = 20; b = a + 5;等都是表达式语句。
    1. #include <stdio.h>
    2. int main()
    3. {
    4. int a = 20;
    5. int b = 0;
    6. b = a + 5; //表达式语句
    7. return 0;
    8. }
    复制代码
  • 函数调用语句:函数调用加上分号就是函数调用语句,像printf("hehe\n"); int ret = Add(2, 3);(ADD一般是加法函数的命名)都是函数调用语句,它们负责调用函数执行特定的功能。
    1. #include <stdio.h>
    2. int Add(int x, int y)
    3. {
    4. return x+y;
    5. }
    6. int main()
    7. {
    8. printf("hehe\n");//函数调⽤语句
    9. int ret = Add(2, 3);//函数调⽤语句
    10. return 0;
    11. }
    复制代码
  • 复合语句:用成对括号括起来的代码块就是复合语句,也叫代码块。函数里的代码块和循环体里的代码块都属于复合语句,它能把多条语句组合成一个逻辑单元。
  • [code]void print(int arr[], int sz) //函数的⼤括号中的代码也构成复合语句 { int i = 0; for(i=0; i);="" }="" int="" main()="" i="0;" arr[10]="{0};" for(i="0;" i<10;="" for循环的循环体的⼤括号中的就是复合语句="" arr="10-i;" printf("%d\n",="" return="" 0;="" }[="" code]="" <="" li="">
  • 控制语句:控制语句用于控制程序的执行流程,实现顺序结构、选择结构和循环结构。C 语言有九种控制语句,分为条件判断语句(if语句、switch语句)、循环执行语句(do while语句、while语句、for语句)和转向语句(break语句、goto语句、continue语句、return语句),后续学习中我们会深入了解它们的用法。
  • 14. 注释 

  • 注释是对代码的解释说明,编译器会忽略注释,它主要是写给程序员自己或其他阅读代码的人看的。好的注释能帮助我们更好地理解代码,就像在陌生的地方有了路牌。不过,也别过度注释,写那些没必要的注释反而会让代码看起来乱糟糟的。

    C 语言的注释有两种形式:

  • /**/形式:把注释内容放在/*...*/之间,可以分行写,也能插在行内。但要注意,一定要写结束符号*/,不然会导致错误,而且这种注释不支持嵌套。
  • //形式:这是 C99 标准新增的语法,把注释放在双斜杠//后面,从双斜杠到行尾都是注释内容,它只能是单行注释,可以放在行首或语句结尾。另外,注释可不能放在双引号里面,不然就会变成字符串的一部分,失去注释的作用啦。编译的时候,注释会被替换成一个空格。
  •  附加两道练习题

  •  发布信息_牛客题霸_牛客网你的手机丢了,在屏幕上输出信息告诉大家。。题目来自【牛客题霸】

    https://www.nowcoder.com/practice/20e59d0f388448c68f581b9d3ca66049?tpId=107&&tqId=33312&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking

     BC6-小飞机
    https://www.nowcoder.com/practice/5cd9598f28f74521805d2069ce4a108a?tpId=107&&tqId=33287&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4008
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行