CSC-NOTESCSC-NOTES
首页
  • 前端笔记

    • Vue
    • React
    • CSS
    • JavaScript
    • TypeScript
  • 服务端笔记

    • NodeJS
  • C/C++

    • C语言
  • 数据库笔记

    • Postgresql
  • 计算机网络

    • 计算机网络基础
    • 计算机网络进阶
  • 操作系统

    • 操作系统基础
    • 操作系统进阶
  • 前端工程化

    • Vue
    • React
  • 后端工程化

    • NodeJS
  • 数据结构
  • 算法
  • 前端面试
  • 后端面试
Github
首页
  • 前端笔记

    • Vue
    • React
    • CSS
    • JavaScript
    • TypeScript
  • 服务端笔记

    • NodeJS
  • C/C++

    • C语言
  • 数据库笔记

    • Postgresql
  • 计算机网络

    • 计算机网络基础
    • 计算机网络进阶
  • 操作系统

    • 操作系统基础
    • 操作系统进阶
  • 前端工程化

    • Vue
    • React
  • 后端工程化

    • NodeJS
  • 数据结构
  • 算法
  • 前端面试
  • 后端面试
Github
  • C/C++
    • C语言
      • 1、初识C语言
      • 2、C语言概述
    • C++
      • 1、C++历史
      • 2、数据类型

1.1 C语言的起源

1972年,贝尔实验室的丹尼斯·里奇和肯·汤普逊在开发UNIX操作系统时设计了C语言。C语言是在B语言的基础上进行设计的。C语言的设计初衷是将其作为程序员使用的一种编程工具。

1.2 选择C语言的理由

在多去几十年的时间里,C语言已经成为最重要、最流行的编程语言之一。

1.2.1 设计特性

C是一门流行的语言,融合了计算机科学理论和实践的控制特性。C语言设计理念让用户能轻松快速地完成自上而下的规划、结构化编程和模块化设计。因此,用C语言编写的程序反而更易懂、更可靠。

1.2.2 高效性

C是高效的语言,在设计上,它充分利用了当前计算的优势,因此C程序相对更紧凑,而运行速度更快。实际上,C语言具有通常是汇编语言才具有的微调控能力,可根据实际情况微调程序以获得更大运行速度或最有效的使用内存。

1.2.3 可移植性

C是可移植的语言。在一种系统中编写的C程序稍作修改或不修改就可以在其他系统运行。从8位微处理器到超级计算机,许多计算机体系结构都可以使用C编译器(C编辑器是把C代码转换成计算机内部指令的程序 )。但是要注意,程序中针对特殊硬件设备或操作系统特殊功能,通常是不可移植的。

1.2.4 强大而灵活

C语言功能强大且灵活。例如,功能强大的且灵活的UNIX操作系统,大部分是用C编写的;其他语言的许多编译器和解释器都是用C语言编写的。C程序可以用于解决物理学和工程学的问题,甚至可用于制作电影特效。

1.2.5 面相程序员

C语言是为了满足程序员的需求而设计的,程序员利用C可以访问硬件、操控内存中的位。C语言有丰富的运算符,可以让程序员简洁的表达自己的意图。这样灵活性即是缺点也是优点,缺点是,你可能会犯一些莫名其妙的错误,这些错误不可能在其他语言中出现。C语言在提供更多自由的同时,也让使用者承担了更大的责任。

1.2.6 缺点

C语言也有一些缺点,要享用C语言自由编程的乐趣,就必须承担更多的责任。特别是,C语言使用指针,而涉及指针的编程错误往往难以察觉。

C语言紧凑简洁,结合了大量的运算符。正因如此,我们也可以编写出让人费解的代码。虽然没有必要强迫自己编写这些晦涩的代码,但是有兴趣写写也可以。

1.3 C语言应用范围

C语言的应用范围从小型的操作系统(UNIX系统)扩展到个人计算机、超级计算机。许多软件公司都用C语言来开发文字处理程序、电子表格、编译器和其他产品,因为用C语言编写的程序紧凑而高效。无论是软件公司、经验丰富的程序员,还是其他用户,都能从C语言中受益。越来越多的计算机用户转而求助C语言解决一些安全问题。不一定非得是计算机专家才能使用C语言。

目前许多软件公司使用C++来开发大型项目。C++在C语言的基础上嫁接了面相对象编程工具。C++几乎是C的超集,这意味着任何C程序差不多就是一个C++程序,了解了C语言相当于了解了许多C++知识。

1.4 计算机能做什么

在学习如何用C语言编程之前,最好先了解一下计算机的工作原理。这些知识有助于你理解用C语言编写程序和运行C程序时所发生的事情之间有什么联系。

计算机由多个部件构成。中央处理单元(CPU) 承担绝大部分的运算工作。随机存取内存(RAM) 是存储程序和文件的工作区。永久内存存取设备(硬盘) 即使在关闭计算机之后数据依然存在。另外还有各种外设:鼠标、键盘等。CPU负责处理程序,接下来重点讨论它的工作原理。

CPU的工作非常简单,至少从以下简短描述中看是这样的。它从内存中获取一条执行指令,然后再从内存中获取并执行下一条指令,诸如此类(一个吉赫兹的CPU一秒能重复这样的操作大约十亿次,因此CPU能以惊人的速度从事枯燥的工作)。CPU上有自己的小工作区---若干个寄存器组成,每个寄存器都可以存储一个数字。一个寄存器存储下一条指令的内存地址,CPU使用该地址来获取和更新下一条指令。在获取指令后,CPU在另一个寄存器中存储该指令,并更新第一个寄存器存储下一条指令的地址。CPU能理解的指令有限(这些指令的集合叫做指令集)。而且,这些指令相当具体,其中的许多指令都是用于请求计算机把下一个数字从一个位置移动到另一个位置。例如,从内存移动到寄存器。

下面介绍两个有趣的知识。其一,存储在计算机中的所有内容都是数字。计算机以数字形式存储数字和字符。每个字符都有一个数字码,计算机载入寄存器的指令也以数字形式存储,指令集中的每条指令都有一个数字码。其二,计算机程序最终必须以数字指令码来表示。

简而言之,计算机的工作原理是:如果希望计算机做某些事情,就必须为其提供特殊的指令序列(程序),确认地告诉计算器要做的事和怎么做。必须用计算机直接明白的语言(机器语言)创建程序。这是一项繁琐、乏味、费力的任务。计算机要完成两个数相加这样的简单事,就得分类似以下步骤。

  • 从内存位置2000上把一个数字拷贝到寄存器1.
  • 从内存位置2004上把一另一个数字拷贝到寄存器2.
  • 把寄存器2中的内存与寄存器1中的内容相加,把结果存储在寄存器1中。
  • 把寄存器1中的内容拷贝到内存位置2008.

1.5 高级计算机语言和编译器

高级计算机语言以多种方式简化了编程工作,不用使用数字码表示指令,使用的指令更贴近现实理解。使用高级编程语言,可以在更抽象的层面表达你的想法,不用考虑CPU在完成任务时具体需要哪些步骤。

int total = 1 + 2;

对于程序员而言,光看这行代码就知道计算机要做什么,而看用机器语言写成的等价指令则费劲的多。但是对于计算机而言恰恰相反。在计算机看来,高级指令就是一堆无法理解的无用数据。编译器在这里就派上了用场。编译器是把高级语言程序翻译成计算机可以理解的指令。程序员进行高级思维活动,编译器则负责处理冗长乏味的细节工作。

编译器还有一个优势。一般而言,不同的CPU制造商使用的指令系统和编码风格不同。例如,Intel Core i7 CPU编写的机器语言程序对于 ARM Cortex-A57 CPU而言什么都不是。但是,可以找到与特定CPU匹配的编译器。因此,使用合适的编译器或编译器集,便可以把一种高级语言程序转化成供各种不同类型CPU使用的机器语言程序。一旦解决了一个编程问题,便可以让编译器翻译成不同CPU使用的机器语言。

💬 欢迎评论!请确保您已登录 GitHub。

最近更新: 2025/6/7 07:41
Contributors: onion-chen, chenshicong
Next
2、C语言概述