文档章节

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

 宁哥实战课堂
发布于 2017/05/12 17:22
字数 1101
阅读 11
收藏 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
长沙
其他
私信 提问
不找C++的工作也要学C++

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

ningcaichen66
2017/10/04
0
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
774
18
C语言/C++编程学习:不做C/C++工作也要学C/C++的原因!

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

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

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

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

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

张明旭
2016/02/10
207
2

没有更多内容

加载失败,请刷新页面

加载更多

在 Linux 上使用 tarball

Tarball 提供了一种在 Linux 系统上备份和管理一组文件的通用方法。请按照以下提示了解如何创建它们,以及从中提取和删除单个文件。 “tarball” (LCTT 译注:国内也常称为“tar 包”)一词...

Linux就该这么学
11分钟前
0
0
2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(上)

摘要: 回顾2018,展望2019,计算机科学技术继续前进! 1、简介: 过去几年一直是人工智能爱好者和机器学习专业人士最幸福的时光。因为这些技术已经发展成为主流,并且正在影响着数百万人的生...

阿里云官方博客
15分钟前
0
0
UnsatisfiedLinkError sawindbg.dll

方法:搜索sawindbg.dll,然后将文件报错的目录下

洛水
17分钟前
0
0
说说不知道的Golang中参数传递

本文由云+社区发表 导言 几乎每一个C++开发人员,都被面试过有关于函数参数是值传递还是引用传递的问题,其实不止于C++,任何一个语言中,我们都需要关心函数在参数传递时的行为。在golang中...

腾讯云加社区
17分钟前
0
0
207. 多数据源 ssm项目

参考博客: https://blog.csdn.net/a15020059230/article/details/76677322 1.效果 一个项目同时连接多个数据源 2. 过程 2.1 搭建单数据源ssm项目 https://my.oschina.net/springMVCAndsprin...

Lucky_Me
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部