文档章节

不要认为学PHP就不需要学C语言

 宁哥实战课堂
发布于 2017/05/12 17:22
字数 1101
阅读 10
收藏 0

之所以这样说“不要认为学PHP就不需要学C语言”,是因为一味的只学PHP而没有C语言等这些基础语言的支撑,是很难深入理解PHP的很多东西的。

这样的例子其实很多,这里我就举这个例子吧:PHP的数组和C语言的数组的区别和联系。

学过C语言的朋友当然知道C语言里有数组;

PHP里也有数组,但他们两个的功能几乎差别很大,PHP的数组太多很好用的功能。那这是什么原因?是不是有多种数组,你只是学其中一种数组?其实不是的。

根本原因是:C语言里的数组是真正的数组,是在栈中申请的一段连续存储的空间,这种空间一旦申请是不能再添加一个元素,再删除某个元素,只能整体操作,要么全部删除,要么重新再申请一个数组。这就是真正的数组。

而PHP中的数组,其实不是这样的数组,它是在堆中申请内存,然后用指针去指向头地址,然后遍历指针,这样就可以删除某一个元素,随时添加一个新元素,因为它本质上不再是那种真正的数组,而是链表。

那么从这里可以看出,C语言对于PHP的理解和学习意义很大。没有C语言的链表支撑,会让PHP的那些特性出现的莫名其妙,漫天幻想也总是感觉脚不着地。

C语言中的链表原理是实现C++里的vector,list,map,等动态数组、链表、集合、队列的原理依据,也是实现PHP里面的数组(本质是链表实现的动态数组)的原理依据。

那么上层语言的那些复杂的数据结构的理解也就变得顺理成章了。对于PHP数组的那些操作也就变得很容易理解了。如:

在最后插入一个元素:

不要认为学PHP就不需要学C语言

不要认为学PHP就不需要学C语言

弹出一个元素:

不要认为学PHP就不需要学C语言

不要认为学PHP就不需要学C语言

这些东西用起来是很舒畅的,不会给你弹出一个恐怖的黑窗口错误提示,但是舒畅的背后是需要基础来支撑和理解的,牺牲编译性能是它的事,但能否理解的通就是你的事了,理解不了就只能死记硬背,那就不舒畅了,因为会很容易忘记。

如何才能不容易忘记,那就要理解它,理解它的来源,理解它可行性的实现原理....一切才会顺其自然。谁也没有规定,你要学会必须要学的很痛苦才行啊。

知其然而不知其所以然,是学有所成的最大障碍,也是出现学习瓶颈的最大因素。

所以C语言的意义在于对上层语言更轻松的理解,上层语言中如:PHP,不是用来学链表的,而是用链表的。所以用PHP来写个链表其实意义性并不大。

那只是给见识很少的初学者进行一次“学术显摆”而已。因为PHP里连指针都隐藏了,又何谈深入理解链表?也难怪学C的看不上C++的,学C++的看不上学PHP的;难度不一样,在有深厚内功的编程人员眼里,很多所谓的过来人其实是在做“哗众取宠”的事,估计是那种无所谓只要能忽悠初学者就行的感觉吧。

学习要善于联想,才能给学习减负。关注学习心情,才能长远。善于理解还是需要一定的实力、广度和深度来支撑的。

所以,不要再认为学PHP就可以不要学C语言了,否则你理解PHP很多东西都难理解的通,没有基础只能靠幻想、背诵,也难深入和长久学下去,因为太累......同时学C语言也不是说你看了、学了就算过关了,关键是要会,要懂。

比如随便给一个不懂计算机的人就能解释链表是什么?有什么特点,怎么实现等等。你能说多少,才表示你会了多少。

© 著作权归作者所有

共有 人打赏支持
粉丝 5
博文 72
码字总数 77184
作品 0
长沙
其他
关于语言的学习

.NET Assembly X86 Alpha ASP C++ C# Clojure CSS Dephi DTD Fortra Groovy HTML Java Java Script Java Server Page Late X Lisp Lua Matlab Pascal Perl PHP Python Ruby Scala Shell Scri......

870177103
2013/08/03
744
18
不找C++的工作也要学C++

很多学编程的人认为,特别是初学者会认为:“我又不找C++的工作,为什么要学C++?”,就像“我又不找C语言的工作,为什么要学C语言”一样;其实答案不在于你做不做C++的工作,而在于你做不做...

ningcaichen66
2017/10/04
0
0
C语言/C++编程学习:不做C/C++工作也要学C/C++的原因!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你学知识
06/13
0
0
C语言/C++编程学习:不找C/C++的工作也要学C/C++的原因!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界
06/01
0
0
关于编程语言的思考

序言 学习前端设计也还是近一个星期的事,主要是因为好奇——上了四年的计算机本科,只对网页运作有个模糊的认识,尽管计算机网络也学的差不多,不过还是不清楚到底点网页是怎么呈现在IE上的...

张明旭
2016/02/10
207
2

没有更多内容

加载失败,请刷新页面

加载更多

linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
49分钟前
1
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
57分钟前
2
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
10
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
0
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部