• 从变量与内存映射去理解赋值语句

    深刻地理解赋值语句
    服务器君一共花费 11.276 ms 进行了 2 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    编程语言入门

    每一门编程语言都有自己的主网站。当你学习某一门编程语言的时候,最好从那门语言的主网站开始,那上面都有一些入门的简单例子,可以帮助你迅速获得一个直观印象。 

    你遇到语法概念不清楚的问题的时候,你想深入了解其语法定义规范的时候,你需要知道这么一个英文单词(Specification)。比如,如果你想了解Java语法规范的时候,你就在搜索引擎中使用这么几个关键字:Java Language Specification。 

    这样,你就可以迅速定位到该语言的语法规范定义。通过阅读语法规范,你可以对这门语言的设计初衷和实现思路有个大致了解,从而更好地了解该门语言的优缺点。

    另外一个你需要掌握的关键字是BNF。这个英文缩写的含义是巴科斯范式(BNF: Backus-Naur Form 的缩写),是由 John Backus 和 Peter Naur 首次引入一种形式化符号来描述给定语言的语法。

    几乎每一门编程语言都有自己的BNF语法形式描述。BNF语法形式描述直观地定义了某一门编程语言的词法分析构成,所有的语法结构和关键字都一目了然。

    BNF本身也是一门语言,而且是定义语言的语言,自然也有自己的语法,不过,BNF的语法规则很简单,多看几遍就会了,不用费什么功夫。

    • 我的建议是,当你学习某一门语言的时候,最好顺便观摩一下该语言的BNF定义。如何观摩呢?当然是在网上搜索。比如,你想看一下C语言的BNF定义,你就搜索C和BNF这两个关键字就可以了。

    随着你对编程语言认识的深入,BNF的重要性就会愈发凸显出来,尤其是当你打算自己定义一门语言的时候。

    好了,现在让我们继续探讨赋值语句的主题。前面讲到,变量名既可以出现在赋值符号(=)的左边,也可以出现在赋值符号(=)的右边。当变量名出现在赋值符号右边的时候,就表示读取这个变量的值。当变量名出现在左边的时候,就表示整个表达式的执行结果将存入这个变量。那么,变量到底是个什么东西呢?

    变量与内存映射

    我们知道,所有的计算机程序全都是在计算机内存中运行的。变量可以读,也可以写,这非常符合内存单元的特性。很明显的,变量可以对应到一个内存单元。

    • 我们可以想象一个巨大的柜子(内存),上面布满了小格子(最小内存单元)。每个小格子都有自己单独的地址(内存地址)。其中一个小格子上面贴了一个标签,上面写着“x”。这就定义了一个名字叫做“x”的变量。

    当“x”出现在赋值符号的右边表达式中的时候,就意味着,贴着“x”标签的内存单元中的内容被读出。当“x”出现在赋值符号的左边的时候,就意味着,贴着“x”标签的内存单元中的内容被改变成右边表达式的最终执行结果。

    这个模型映射得很好,非常直观,一点弯也都没有绕。高级命令式语言中的变量概念可以直接映射到计算机内存结构中。

    但是,现在有这样一个问题。我们需要将高级命令式语言中的变量概念直接映射到内存结构中吗?换句话说,我们既然使用了高级语言,为什么不能在更抽象、更高级的层次上编程呢?为什么一定要在脑海中把变量这个概念映射到内存单元的层次呢?

    其实,高级语言确实有这样的设计初衷,希望程序员能够在更高级、更抽象的层次上思考问题,而不用考虑底层实现细节。在很多浅显的编程入门书籍中,根本就不会讲到变量与内存单元映射的这个知识点。

    特意强调这个知识点,是从我本人的实际经验出发。 在我学习和应用高级命令式语言的过程中,我发现,高级命令式语言中有不少概念含糊不清,模棱两可,很难说得通,但是,一旦引入内存模型的概念,一切迷雾就迎刃而解了。

    掌握了变量与内存映射关系这个知识点后,我们就可以继续研究更加复杂的赋值语句了。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [软件工程与项目管理] 呈现树的构建 13 个条目
  2. [智力开发与知识管理] 信息的类型与结构 9 个条目
  3. [PHP程序设计] PHP中的Hash算法 3 个条目
  4. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  5. [Python程序设计] 从PHP到Python 3 个条目
  6. [Python程序设计] 标准库:urllib/urllib2 14 个条目
  7. [软件工程与项目管理] 浏览器的CSS解析 7 个条目
  8. [移动开发] 从代码角度去认识 Activity 4 个条目
  9. [数据库技术] 无限级分类数据表设计 4 个条目
  10. [移动开发] Android属性系统Property 9 个条目
  11. [Python程序设计] Django 入门知识浅介 10 个条目
  12. [Python程序设计] Django后台管理系统 2 个条目
窗口 -- [资讯]