学习C语言你所必须要了解的知识

C 语言的发展方向

20世纪80年代初,C 在 UNIX系统的小型机世界中已经是主导语言了,从那时开始,它已经扩展到个人计算机和大型机, 大部分软件开发商公司都选用了 C 语言来开发其子处理程序,电子表格软件,编译器等等。因为他们知道,C 可以产生紧凑而高效的程序。更重要的是,他们知道这些程序易于修改而且易于适应新的计算机模式。

对于公司和熟悉 C 语言的人有帮助的东西,对其他用户同样有帮助。越来越多的计算机用户已转身使用 C 以便利用其优点。不一定非得是计算机专业人员才能使用 C。

而到了20世纪90年代,许多软件开发商开始转身使用C++语言来进行大的编程项目。C++向 C 语言嫁接了面向对象编程工具(面向对象编程是一种哲学思想,它试图让语言来适应问题,而不是让问题来适应语言)。C++差不多是 C 的一个超集,意味着任何 C 程序都同时是,或差不多是一个有效的 C++程序。通过学习 C,你能够更容易的接受 C++的许多知识。

不管 C++ 和 Java 这样较新的语言如何流行,C 在软件产业中仍然是一种重要的技能,在最想获得的技能中,它一般都列在前10名。特别是在嵌入式系统的编程中,C也补课或缺。也就是说,它将用来为汽车,照相机,DVD播放器和其他现代化设备中逐渐普及的微处理器编程。同样,C 已开始进入长期以来一直属于 FORTRAN 的科学编程领域。最后,由于它是一种适合用来开发操作系统的语言,C 在 Linux的开发中也扮演着重要的角色。即使到现在,C 仍将保持强劲的势头。

简而言之,C 是最重要的编程语言之一,并将继续如此,如果你想找一份编程的工作,则首先你所不能缺失的一种能力就是C的使用。

计算机工作的基本原理

计算机

如果你打算学习如何使用 C语言来进行编程,你就必须要了解计算机工作原理方面的一些知识。这些知识会帮助你更好的理解使用 C语言 编写程序与运行该程序时最终会发生的事情之间的联系。

现在的计算机可分为几个部件。中央处理单元(CPU)担负着绝大部分的计算工作,随机访问存储器(RAM)作为一个工作区来保存程序和文件;永久存储器,一般是硬盘,即使在计算机关机时也能记下程序和文件;还有各种外部输入输出设备(如键盘,鼠标,打印机)用来提供人与计算机之间的通信。CPU负责处理程序,所以我们集中来讨论它的功能。

CPU

CPU 的工作非常简单,至少在我们所了解的情况中是这样的。它从内存中获取一个指令并执行这条指令,然后从内存中获取下一个指令并执行它,周而复始。一个千兆 CPU 可以在一秒种内进行大约一亿次这样的操作,所以 CPU 能以惊人的速度来从事极其枯燥的工作,如果用人力来执行,可能会使一个人精神崩溃。CPU 有自己的小工作区,该工作区由若干个寄存器组成,每个寄存器可以保存一个数。一个寄存器保存下一条指令的内存地址,CPU 使用该信息获取下一条指令。获取一条指令后,CPU 在另一个寄存器中保存该指令并将第一个寄存器的值更新为下一条指令的地址。CPU 只能理解有限的指令(指令集)。还有,这些指令是相当具体的,其中许多指令要求计算机将一个数从一个位置移动到另一个位置,例如,从内存单元移到寄存器。

这段说明有两个有趣的地方。首先,存储在计算机中的一切内容都是数字。数字是以数字形式存储 的,字符也是以数字形式存储的,每个字符有一个数字代码(ASCII)。计算机装载到寄存器的指令是以数字形式存储的,指令集中的每条指令具有一个数字代码。其次,计算机程序最终必须以这种数字指令代码(或称为机器语言)来表示。

了解了计算机运行方式之后:如果你希望计算机帮你做某件事,就必须提供一个特定的指令列表,确切地告诉计算机要做的事及如何去做,计算机是死的,他只会按照你的命令去做事。你必须以一种计算机可以直接理解的语言(机器语言)来创建该程序。这是一项繁琐,乏味,费力的任务。即使将两个想回这样简单的事也必须被分解成若干个步骤:

1 将内存单元为2000中的数字复制到寄存器1.

2 将内存单元为2004中的数字复制到寄存器2.

3 将寄存器2的内容加到寄存器1的内容,答案保留在寄存器1中。

4 将寄存器1的内容复制到内存单元2008.

而且你必须用数字代码来表示这些指令中的每一个!

如果你喜欢以这种方式编写程序,抱歉,机器语言编程的时代已经过去很久了。

而如果你还是想要学习编程,那么你可以学习高级编程语言。

高级计算机语言和编译器

如 C语言 这样的高级编程语言,可以从几个方面简化你的编程过程。首先,你不必用数字代码即ASCII来表示指令。其次,你所使用的指令更接近你考虑问题的方式,而非接近计算机使用的详细操作步骤。现在你不用再考虑特定 CPU 实现特定任务所必须采取的精确步骤,而是可以在更抽象的层次上表达你的意图。

例如,要对两个数求和 a+b=c,你可以编写下列内容:

c = a + b;

看到这样的代码,即使你没学过编程,你也能大概的知道它所表达的意思。但如果看到用数字代码表示的由若干条指令组成的机器语言等价代码,则不会让人这么明白。

比如这样的一段汇编代码,:

mov ax,1

mov bx,2

add ax,bx

mov cx,ax

mov ax,4c00h

同样是a+b=c,事实上如果没有专门的学习过,我完全不理解它所表达的是什么意思。

不幸的是,计算机对于我们来说则正好相反。对计算机来说,高级指令是完全不能理解的胡言乱语。因而才有了 编译器 的出现。编译器是将高级语言程序翻译成计算机所能理解的详细机器语言指令集的程序。分工合作,我们只需要进行高级思考,余下的交给编译器来完成就好可以了。

常用的编译器

简单的说,高级语言(如C,Java 和 C++)都以更抽象的方式即我们人的思维来实现代码。同样,高级语言相较于机器语言来说更容易学习,同时用高级语言编写程序比用机器语言来说,代码量更少,更容易。

本文来自企鹅号 - 冷漠丶媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏申龙斌的程序人生

零基础学编程021:获取股票实时行情数据

春节期间重写了“笑来投资演练程序1.0版”这个程序,可以每个月自动更新几支股票的行情数据。程序的功能不复杂,但是编程新手想实现它仍有相当的困难。为了短时间内完成...

51412
来自专栏Crossin的编程教室

【Python 第41课】 用文件保存游戏(3)

你的小游戏现在已经可以保存成绩了,但只有一组成绩,不管谁来玩,都会算在里面。所以今天我还要加上一个更多的功能:存储多组成绩。玩家需要做的就是,在游戏开始前,输入...

2574
来自专栏斑斓

剖析响应式编程的本质

基于Actor的响应式编程计划分为三部分,第一部分剖析响应式编程的本质思想,为大家介绍何谓响应式编程(Reactive Programming)。第二部分则结合...

4526
来自专栏陈树义

JVM系列开篇:为什么要学虚拟机?

跟许多人一样,我一开始接触 Java 虚拟机只是因为面试需要用到,所以硬着头皮看看。所以很多人对于为什么要学虚拟机这个问题,他们的答案都是:因为面试。但我经过了...

893
来自专栏Java程序员的架构之路

一个两年的程序员,面5家斩获点我达,网易offer的面试总结

毕业到现在也近两年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...

2884
来自专栏HansBug's Lab

【作业】HansBug的前三次OO作业分析与小结

OO课程目前已经进行了三次的作业,容我在本文中做一点微小的工作。 第一次作业 第一次作业由于难度不大,所以笔者程序实际上写的也比较随意一些。(点击就送指导书~)...

3486
来自专栏梧雨北辰的开发录

Python学习(1):入门与导学一、了解Python二、Python能做些什么三、Pthon特点四、Python的缺点五、Python之禅六、Python学习的相关资料

1776
来自专栏ytkah

dedecms提取某栏目及子栏目名称到首页怎么弄

  我们建网站时有不同的需求,例如为页面创建一个栏目导航,用dedecms如何提取某栏目及子栏目名称和链接呢?如下图所示,先列出指定的顶级栏目,在下方再列出此栏...

2944
来自专栏黑泽君的专栏

Java语言的发展史

  Java的名字来自于一种咖啡的品种名称,所以Java语言的Logo是一杯热气腾腾的咖啡。

1561
来自专栏大数据文摘

编程新手入门踩过的25个“坑”,你犯过其中哪些错误?

1873

扫码关注云+社区

领取腾讯云代金券