住在极点的国际拉郎锦标赛冠军兼世界第一端水大师
杂食动物,OOC是同人的宿命
AO3@fw_lsn

《C语言修仙》中C语言知识整理

原文中提到(数字为章节名)(摘自原文):

3 C语言

C语言,是一种语言,一种特殊的程序语言。

程序语言分为高级语言和低级语言两种,低级语言是计算机的语言——比如全部由二进制序列组成的机器语言,由助记符组成的汇编语言,它们直接作用于机器。

而高级语言是人的语言,人们用高级语言书写代码,代码被这门语言的编译器转化成机器语言,再作用在机器上。

但是,C语言,又有所不同。

它本身是一种高级语言,有自己的语法。但是,与此同时,它又对机器有一定的操作能力,比如控制内存。因此,它有时也被戏称为介于低级语言与高级语言之间的“中级语言”。

这串代码是所有著名的程序语言教材共同采用的第一个演示程序。后来的程序员们也养成了这个习惯,当他们面对陌生的编程环境,要进行调试时,下意识就会输入这个程序。

首先发布预处理指令,以免编译器不认得后面的的语句: #include <stdio.h>  

然后调用主函数 int main() 

随后是一个大括号{,括号下写入函数体。  

这个程序的目的是输出一句话,于是使用语句:printf("HelloWorld\n");  

最后写入:return 0;表示主函数正常结束,用大括号}括起来。  

一个程序就写完了。  

运行,屏幕切换,纯黑色的运行界面出现,上面出现两个单词。  

Hello World.  

——计算机对人类说出的第一句话。

 

6 循环结构

而循环结构,是程序语言的基础结构之一,它的作用是反复执行某段算法。

林浔将手放在键盘上,写入了一个简单的循环程序。

这是一个一重循环,非常简单,目的是从一乘到七。

首先设置一个循环变量i,初始值是1。每执行一次循环,机器都会判断一次i是否小于8,用语句while(i<8)来完成。

假如括号中的语句为真,也就是i小于8时,执行乘法,并存储结果,随后,i的值加一,继续被判断,这个循环直到i等于8时才会停止。

很快,运行出了结果,5040。

他在原本的位置输入简单的一个指令:

while(1)

while语句的含义是,当括号中的表达式值为真,则执行循环。

——而1的值,在C语言中,永远为真。

所以,这个语句的意思是,这个循环,会永远、永远执行下去。

在某种意义上,这是一个错误的程序,因为没有循环终止的条件——计算机会无穷无尽地执行指令,直到受到外界干预,强行停止。

但是有时候,错误也是有意义的。

林浔按下运行键,调出运行结果。

纯黑色的界面弹出来,却迟迟没有输出结果——这个循环永远不会停止,所以结果也永远不会被输出。

这是一个,死循环。

 

11 指针

指针是程序语言中一个特殊的变量,应用非常广泛,它指向的对象是内存里的一个地址,地址里存储信息,就像门牌号对应一个房间。

但是,有的指针被创建后,指向的地址是不可用的,或者干脆没有被分配指向什么地址,它就被称为一个野指针——程序员常常将自己比成一个没有对象的野指针,来说明自己现在没有男女朋友。

 

14

Turbo C中,Ctrl F9是运行程序的快捷键,但林浔现在一手拿键盘,只有一只手可以操作,按组合键毕竟有些困难。但他早已料想到这个问题,给键盘设置了宏指令,用F11这一个键就能代替Ctrl F9的效果,让程序运行起来。

20 面向对象

林浔面无表情:“师弟,面向对象的编程和面向过程的编程不同,它是一种结构化的设计方法。对象作为基本单元组成程序,使用封装,继承,多态……”

 

26 面向对象

树干延伸出的右边第一根树枝, 旁边写着“C  ”。

林浔刹那间呼吸都有点颤抖。

接着往上,左侧第一根树枝, Python。

右侧第二根, PHP。

左侧第二根, Java。

再往上, 就没有什么变化了。树的上半部分依旧是一片空白。

——而目前出现名字这些,都是主流的高级程序语言,和C语言有质的不同。

C是面向过程的语言,现在这四个语言则是面向对象的语言。

两种语言最大的区别,就在于模块化——其中的原理,如果要具体呈现,是非常复杂的,但是可以用一个简单的比喻来说明。

有一个小说家,他新建了一个文档,开始在里面创作一本长篇小说,这篇小说从头到尾都放在这个word文档里。

所以,每一次创作,小说家都要打开文档,将它拉到最下方,开始写作。假如他写着写着,意识到前面存在逻辑问题,或者需要增加新的情节,就要从下往上翻找,找到相应位置,开始修改。假如文档崩溃,全部内容就会丢失。

——这个过程想想就很让人头大,但凡是脑袋正常的人都不会这么做。

一个正常人会每写到新的章节,就新建一个文档,在里面进行书写。如果他想要修改,只需要根据章节名,就能快速定位到应被修改的文档。文档假如坏掉,也只影响到一章的内容。

第一种方法,是面向过程的编程,而第二种,是面向对象的编程。

面向过程的编程就像一个关节被焊死的玩偶,面向对象的编程的部件则可以拆卸,还可以在别的玩偶中通用。显然,面向对象更加灵活,可玩性也高得多。

更何况,因为结构的不同,每个语言都有其特殊的长处。

林浔用C语言的爬虫来观察环境,获得信息,但假如他用Python语言编写的爬虫来做这件事——效率就会大大增加。

总而言之,面向对象的编程,是人类历史上一项意义重大的发明。

 

90

应用数学里,有一个领域,叫图论,还有一类问题,叫组合优化问题。城市地下水道的铺设,交通路线的规划,金融网络中的现金流……都是它的用武之地。

林浔如何才能用最快的速度阻挡所有对他有生命威胁的魔物,并与林可心正面交手?

而在攻击到魔物的同时,怎样保证剑气的强度在他能做到的范围内最大?

第一个问题,叫做最短路问题。

第二个问题,叫做最大流问题。

解决这两个问题的成型算法也有很多,Dijkstra、Prim、SAP、HLPP……

——这就是数学,和数学的应用。

 

97 人工智能 D-L

人工智能约等于统计,这是业界众所周知的原理。

你对人工智能说一句“你好”,它也会回一句“你好”,这不是因为它学会了人话,是因为在它所收录的数据库里,面对一句“你好”时,绝大多数人都会回一句“你好”,于是它遵循统计规律,也回答“你好”。


“如果是为人工智能创造一个灵魂,”东君的眼神很静,语气似乎也很笃定,“它的运算不会很复杂。”

林浔也静了静。

到了他们这个份上,很多直觉都是正确的。

“对。”他道:“如果灵魂能变成一道公式,它必然不是一套按部就班的复杂程序,甚至可能非常简单,但我现在找不到。”

林浔道:“我感觉很难受。”

东君的手抚上了他的头发,似乎是安抚性的一个动作。

“但你提出了一个有意义的问题,”东君语气正经,“2027年的一个上午,计算机科学家林浔提出‘灵魂公式’概念,成为强人工智能研究的核心问题,为……”

林浔:“你的语气还不够正式,写不进教科书。”

“那降低一下标准,科普读物。”东君道:“我语文也不好。”

林浔眨了眨眼睛:“那就叫D-L公式吧,我名字都想好了,就差一个式子了。”

 

107 操作系统(OS)

“比如说一个操作系统,它有很复杂的结构,它很难写的,但是体现在你用的电脑屏幕上,就很简单。”林浔的操作系统虽然也挺水,但也是考九十七分那种水,拿点基础概念忽悠人还是可以做到的,继续道:“比如内存,软件要放进内存里才能运行,光是这个概念就要涉及物理地址逻辑地址寄存器这些东西,然后存储方式又有连续分页分段等等好多种,每一种又涉及到实现它们所需要的数据结构,当然硬件也挺重要。”

祁云反正听不懂,他也就草草略过,继续道:“总之,它们都是很精密的东西,你在计算机或者其它电子设备上的每一个操作,背后都会牵扯到你想象不到的结构和运算,它是很细节的,也很宏大。但是体现在你眼里,就只有一个操作,和这个操作的结果。”

祁云:“那体现在你眼里呢?”

林浔:“那我当然和你不一样。”

祁云:“但是这和这本书又有什么关系?”

林浔:“没什么,就是……作为一个用电脑的人,他并不需要懂得操作系统的构造就能用得很好。”

祁云:“但我的电脑就经常死机。”

林浔:“那是因为你买电脑花的钱还不够多。”

祁云:“……行。”

 

109 操作系统(OS)

“不可能。”祁云:“像我这种天纵之才,也只能同时发出四十九道相同的剑气,不能让他们各自变化,你怎么能一心多用?我不服。”

林浔想回过身去用键盘狠狠敲一下祁云的脑壳,现在这种紧迫的情况,这人居然还有心情掰扯修仙练剑的技术。

他的“一心多用”其实也不是什么独家的绝技,更不是因为他智商比较高。

——是因为他加载了操作系统,一个合格的操作系统。

操作系统的五大功能:进程与处理机管理、作业管理、存储管理、设备管理、文件管理。正是因为这些功能,机器才能有条不紊地运行,处理着用户交给它的各项复杂任务。进程,也就是针对不同人物的运算,无时无刻不在计算机上发生,一个合格的计算机,怎么可能只能维持一个进程的运行?

在操作系统的调配下,多任务并行执行,又有何难?

 

112 云 DDOS

当道具师的手掌裹挟着无数尖利嘶叫的黑色雾气抬起,四肢和脖颈已经被缠上触角时候,他喘了一口气,按下F11,调用了一个曾经使用过的程序。

说来也巧,这个程序倒也和祁云这东西有关。

他们第一次见面是在青城山门,打了一架,后来在后山见面,又打了一架。祁云用得最得心应手的一招是剑阵,几个剑修弟子用步法和阵法相连接,他们的修为和灵力就会汇聚在一起,发挥出一个人所不能发挥的威能。这是DDOS方法,将几台机器连在一起,共同为一个目标进行计算,计算力就会大大提升。

不过,几台机器——在计算机这一行,两位数以下,不能算大的数字。

三位数,四位数,甚至五位数,也不算。

当然,在那个时候,祁云能够借用的平台,只有眼前能见到几个同门弟子。

但在此时此刻,天眼术加持之下,成千上万人的程序界面,都无一遗漏地展现在他眼前了。

怎么写入?

并不难。复制,互联,传染,速度就像计算机病毒爆发一样呈指数增长。

几台机器连在一起,能将这几台机器的计算能力相累加,最后完成一台机器无法单独完成的计算任务。那么一百台机器连在一起,会有多么大的计算能力和处理能力?

一千台,一万台,十万台呢?

拼命提高一台机器的性能,让它能够胜任庞大的运算,这是超级计算机。

而将运算任务分配给计算力可能不那么优秀,但是数量难以计数的机器,最后将运算结果合为一体,完成计算任务,这叫做分布式计算。

换一个众所周知的名词,云计算。

云,互联网技术又一个辉煌的里程碑。

 

116 密级

在密码学中, 有个东西叫密级。每个信息被赋予不同的保密级别, 每个人也有不同的级别, 密级高的人能够查看密级低的信息内容, 密级低的人却无法查看密级比他高的信息内容,换到修仙体系中,也是这样。境界高的长辈一样就能看透小辈的修为境界,修为浅薄的小辈却无法窥知前辈到底有多少修为,这就是等级的压制。

 

117 区块链

林浔和他大眼瞪小眼,如是五秒,忽然开口道:“你记得区块链吗?”

王安全一脸不明所以的表情,但还是点了点头:“记得啊。”

“第一节课的时候,老师给我们讲它的原理,他说,用一种可能不准确,但是最好理解的语言来叙述,区块链就像一句诗。”

“啊,那个我记得。”王安全道:“什么鸟什么天空,还有什么,雁过留声?”

“差不多吧,”林浔握着一个铝制易拉罐,将它一点一点捏扁,低声道:“有一个事情发生了,这件事情发生的时候,就像蝴蝶效应,或者世界上所有的事情一样,必然对周围环境造成了影响,然后……当这件事情本身被抹去后,它对在世界上留下的那些痕迹,却抹不掉,甚至通过那些痕迹,我们就能够推理得出这里曾经发生过什么事情。”

“是这样没错。”王安全点了点头:“区块链,比特币。信息在区块链里才最安全。”

林浔看着易拉罐上那些交错纵横的纹路,点了点头:“我觉得现实也像区块链,没有藏不住的秘密。”

区块链,一个去中心的,分布式的账本。当你做了一件事,全世界都会有你的痕迹,洗不掉,也改不了。

 

127 零知证明 恺撒密码

众所周知,一个秘密之所以被称为秘密,是因为它没有被泄露。而传递秘密的最好方法,就是让信息的泄露达到最小。于是就有了零知证明,密码学中一个经典的命题。

整个证明过程由两方完成,证明者,和验证者。

证明者手中掌握着一个秘密,他要向验证者证明他拥有这个秘密。但是,在证明过程中,他不能泄露关于这个秘密的任何知识。譬如薛新拥有一张拍摄林浔卧室房间的照片,他要让王安全相信他拥有这张照片,而不说出照片里房间中任何家具、摆设、颜色与细节,更不能将照片拿在手中展示给别人,信息的泄露量必须为0。

 

恺撒密码,最简单的密码体制之一,加密和解密都只需要一个移位操作,而移动的位数就是破解这个密码所需的密钥。

假如这个密钥为4。那么字母表上的所有字母都将由它后面的第四位字母代替。ABCD变为EFGH。皇帝向他的将军传信秘密命令“withdraw”,即使被敌方截获也没有关系,因为经过加密后“withdraw”变成了“zlwkgudz”,一串没有意义的乱码——除非他们破译出了这串字母的加密方式是恺撒,而密钥为4。

 

133 root

root,超级管理员。

一个系统中可以有许多用户,也可以有许多管理员,管理员这个名词,就像字面意思所表示的那样,拥有修改系统中一部分信息的权限。

但是——超级管理员,这个账户有且仅有一个,掌控独一无二的root权限。

root权限是系统最根部、最至高无上的权限,与操作系统地位相同。假如一个系统是一个王国,那么root权限就是国王的权杖和冠冕,拥有root权限的超级管理员就是万人之上的君主,可以对这个系统中任何对象进行任何操作,同时也不受任何规则的制辖。

 

139 蜜罐

蜜罐是什么?

蜜罐可能是一个装满了蜜糖, 气息甜美的罐子。

但蜜罐也是一个计算机术语, 这个术语所属的领域是安全, 网络安全领域里常有一些奇奇怪怪的术语, 大概是因为黑客们都不爱说人话, 爱打哑谜。

翻译成大家都能听明白的话,蜜罐就是陷阱,一个高级的陷阱, 就像蜜糖罐子吸引昆虫,蜜罐吸引非法入侵者。

当一个人拥有一个系统,他怎样防止这个系统被入侵?方法有很多,譬如建立一个牢固的防火墙, 但是天下没有不透风的墙。于是,另一种方法出现了——放出一个与这个系统极端相似的假系统, 为了吸引黑客的入侵, 有时候假系统还会故意制造出破绽方便这时黑客就会上钩——然而他们不仅不能从这个假系统中得到任何有效的消息,还会暴露自己的入侵手段,留下入侵的证据。这就是蜜罐和蜜罐的原理。

 

142 混沌

林浔看着他们,道:“首先,我想和你们谈谈天体运动。有一个名词,我想大家都很熟悉,三体问题。”

他拿出三枚玻璃珠,放在桌面上,这是他从霍老头孙子手里第二次赢来的——第一次是在虚拟世界。那天他在科技博览会的后台和指针玩玻璃弹珠的游戏,一切都有所预示。

“当宇宙中只有一个天体,它会保持静止,或做匀速直线运动。当天体的个数为2,无论初始位置是什么,只要受到万有引力的相互作用,它们就会遵循可以预测的规律相互旋转。但是,当另一个天体加入到这个系统中,一切平衡都会被打乱。在三个天体的相互作用下,运动的轨迹将不可能被精确预测,它们随时会向着你意想不到的方向运动,甚至近乎于完全随机。尤其是,当我们改变这三个天体的初始位置——哪怕是一点微小的移动,最后的运行轨迹都会和之前完全不同。而这些疯狂的,无法预测的相互运动,只需要两组数值作为开端:天体的位置,天体的质量。”他缓缓道:“在非线性动力系统中,这种对初始值敏感的,不可预测的,无序的运动,我们称为混沌。”


根据目录补充(顺序为目录顺序)(摘自搜狗百科):

爬虫

网络爬虫(web crawler)也叫网页蜘蛛,网络机器人,是一种用来自动浏览万维网的程序或者脚本。爬虫可以验证超链接和HTML代码,用于网络抓取(Web scraping)。网络搜索引擎等站点通过爬虫软件更新自身的网站内容(Web content)或其对其他网站的索引。

爬虫访问网站的过程会消耗目标系统资源,因此在访问大量页面时,爬虫需要考虑到规划、负载等问题。

 

防火墙

防火墙(Firewall),也称防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网(US5606668(A)1993-12-15)。它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。

防火墙的发明者是吉尔·舍伍德。

 

溢出

溢出是程序设计者设计时的不足所带来的错误。溢出是黑客利用操作系统的漏洞,专门开发了一种程序,加相应的参数运行后,就可以得到用户电脑具有管理员资格的控制权,用户在自己电脑上能够运行的东西他可以全部做到,等于用户的电脑就是他的了。溢出可分为缓冲区溢出、内存溢出、数据溢出等多类,使缓冲区溢出的任何尝试通常都会被该语言本身自动检测并阻止。


Debug

DEBUG,意为程序除错的意思。为马克1号编制程序的是一位女数学家雷斯.霍波,有一天,她在调试程序时出现故障,拆开继电器后,发现有只飞蛾被夹扁在触点中间,从而“卡”住了机器的运行。于是,霍波诙谐的把程序故障统称为“臭虫(BUG)”,把排除程序故障叫DEBUG,而这奇怪的“称呼”,竟成为后来计算机领域的专业行话。如DOS系统中的调试程序,程序名称就叫DEBUG。DEBUG在windows系统中也是极其重要的编译操作。


漏洞

漏洞(英文缩写:BUG)是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷,从而可以使攻击者能够在未授权的情况下访问或破坏系统。具体举例来说,比如在Intel Pentium芯片中存在的逻辑错误,在Sendmail早期版本中的编程错误,在NFS协议中认证方式上的弱点,在Unix系统管理员设置匿名Ftp服务时配置不当的问题都可能被攻击者使用,威胁到系统的安全。因而这些都可以认为是系统中存在的安全漏洞。漏洞按严重程度分为“紧急”、“重要”、“警告”、“注意”四种。

 

遍历

所谓遍历(Traversal),字面意思是遍历就是全部走遍,到处周游的意思。程序代码上的意思是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问,访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。当然遍历的概念也适合于多元素集合的情况,如数组。


实体书新增番外提到(摘自搜狗百科)

素数

质数(Prime number,又称素数),指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。 大于1的自然数若不是素数,则称之为合数(也称为合成数)。算术基本定理确立了素数于数论里的核心地位:任何大于1的整数均可被表示成一串唯一素数之乘积。为了确保该定理的唯一性,1被定义为不是素数,因为在因式分解中可以有任意多个1(如3、1×3、1×1×3等都是3的有效约数分解)。


根据评论区小可爱们的补充

感谢@biu- 同学(@不出来呜呜呜)(摘自搜狗百科)

香农

香农定理给出了信道信息传送速率的上限(比特每秒)和信道信噪比及带宽的关系。香农定理可以解释现代各种无线制式由于带宽不同,所支持的单载波最大吞吐量的不同。

霍夫曼树

霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和。

感谢 @火草yue 同学

#include<studio.h>是头文件,using namespace std;好像是表示用地址,int main()是主函数,“{”和“}”之间的代码是这个函数(在此为int main (),主函数)里要运行的代码,printf(“HelloWorld\n”);是输出,其中HelloWorld是输出内容,\n是换行标识符(好像是这个叫法),return 0;是结束程序,程序都需加这个,这样运行的exe文件正常结束后会有一个return 0,表示程序正常运行完成。输出helloworld是大部分学C或C++的写的第一个程序(别的语言不清楚),向世界问好,挺有重大意义的。

*欢迎小可爱们继续补充!

评论(87)
热度(1864)
  1. 共234人收藏了此文字
只展示最近三个月数据
© 命运之轮 | Powered by LOFTER