前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我可能早就到阿里腾讯上班去了,如果早点知道这种学编程的方法的话

我可能早就到阿里腾讯上班去了,如果早点知道这种学编程的方法的话

作者头像
谭庆波
发布2019-03-11 16:15:40
4460
发布2019-03-11 16:15:40
举报
文章被收录于专栏:轮子工厂轮子工厂

最近在学C语言程序设计时总是遇到一些概念上不清晰与混乱的地方,在一次偶然间想到了以前看过的一部电影《我是谁,没有一个系统是安全的》,里面的主角用社会工程学的想法结合黑客技术化险为夷,给了我很大的震撼与启发。

所以我想如果将现实中C语言的一些概念和人类社会联系起来,会不会产生一些奇妙的结果。

首先我们应该先从C语言中最基本的概念开始(如果能将C语言中的基本概念与人类社会中的一些基本的概念联系起来的话,根据图灵计算的原理,那么我的这种想法很有可能也行得通)。

如果将变量与常量比作住在房子里的人的话,那么地址就可以认为是那个人(常量或变量)所住的房子的门牌号,每一个人(变量与常量)都有一个属于自己的门牌号(地址)。

指针就可以理解为一个指路牌,指路牌上有门牌号(地址),通过这个门牌号可以找到住在这个房子里的人。

与现实世界不同的是,计算机中的世界上是一维的,也就是说,我们(用户)通过指路牌(指针)就可以准确无误的找到我们要找的那个人(变量或常量)。

这就是我们说为什么指针是C语言中最重要的概念的原因(如果你还不明白,可以自己去百度一下图灵机)。

还有一个基本概念就是内存,我们可以将它类比成房产局,只有向房产局(内存)申请才能获得住在房子(地址)里的权力。

有了以上的概念,那么我们就可以定义一些相对复杂的东西,例如数组,我们知道数组是由许多单一数据类型组成的集合,那么我们就可以将它类比成一个小区,小区里由若干个人(变量)组成,而且每个人(变量)的门牌号(地址)都按一定的规则排放。

特别的,我们知道数组一般在程序中除了初始化外很难直接被整体改变,我们可以理解为一个小区(数组)中的人(变量)太多,当你要对它进行改变时过于麻烦,而若只改变指路牌(指针),那么工作量就会小很多。

类似的,对函数我们可以认为它是一个公司,里面有许多不同类型的人(变量)组成,每个人(变量)各司其职,通过一些工具(C语言中的基础语句,如if语句,以及库函数)来实现用户的目的。

同样,我们可以将结构体看作一个街道,一个街道可能包括一些个体户(变量),一些小区(数组),甚至公司(函数),不过公司(函数)太过庞大,没法全部过来,只能将门牌号(地址)挂在这里,通过指路牌(指针)可以找到它。

与现实中的公司类似,如果一个公司(函数)十分庞大,甚至会包含一个或几个街道,这时,如果函数想要使用结构体,只需知道结构体的变量名以及其中的成员名即可。

值得注意的是,如果你在声明结构体时只声明了结构体名,那么内存是不会分配内存空间的,可以理解为,你只在房产局(内存)提出了想建立一个街道(结构体)的申请,但是并没有告诉房产局(内存)你的街道(结构体)叫什么名字,所以房产局(内存)自然不可能给你分配房子(地址)。

在结构体变量作函数参数时,也需要同时声明结构体名与变量名。

对程序而言,调用变量有两种方法,一种是根据变量名直接调用,一种是根据指针调用。

对此,我们可以理解为当程序编译时,房产局(内存)已经记录了每一个人(变量)的门牌号(地址),当我们要求调用某个人(变量)时,可以直接挨家挨户去找,也可以去房产局(内存)要一个指向他家指路牌(指针),毫无疑问,第二种做法更有效率一些。

发现了吗? 通过将人类社会工程学原理引入到C语言的程序设计中,我们可以更好的理解C语言中的一些概念,这可以降低初学者们学习时的难度,同时也可以反窥C语言的创造者们在编写C语言时的逻辑历程,这对我们以后进行工程作业时可以有更多的启发。

本文只是通过人类社会工程学原理对C语言进行了一个粗糙的解释与刨析,事实上,我们可以基于此对C语言中的一些更加具体的操作进行分析与类比,甚至还可以对内存中的储存区进行分析与说明。如果你有什么类似的理解也可以在留言区和大家一起分享!

另,鉴于本人见识所限,文中如有与事实不符之处,还望指出,万分感谢。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 轮子工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档