奚:王老師,指針是C語(yǔ)言中最難掌握的概念了吧?
王:是呀,學(xué)生對(duì)C語(yǔ)言的畏懼幾乎都來(lái)自對(duì)指針的畏懼。但是指針同時(shí)也是功能非常強(qiáng)大而且應(yīng)用非常廣泛的,因此遲早都必須掌握它[1]。
奚:其他高級(jí)語(yǔ)言不包含指針嗎?
王:包含,但是大多數(shù)高級(jí)語(yǔ)言根本就不允許你對(duì)指針進(jìn)行任何操作,你只能看一看指針指向哪里[2]。
奚:你們選擇C和C++來(lái)研究程序語(yǔ)言發(fā)展規(guī)律,是否與它們包含了對(duì)指針的操作有關(guān)?
王:可以這樣說(shuō)。指針為C語(yǔ)言編程提供了強(qiáng)大的支持——如果能正確而靈活地利用指針,就可以直接切入問(wèn)題的核心,或者將程序分割成一個(gè)個(gè)片段。一個(gè)很好地利用了指針的程序會(huì)非常高效、簡(jiǎn)潔和精致[2]。學(xué)好指針也是為通用的數(shù)據(jù)結(jié)構(gòu)和具體的標(biāo)準(zhǔn)模板庫(kù)的學(xué)習(xí)做準(zhǔn)備[1],因?yàn)镃++的STL迭代器的機(jī)制是模擬指針的操作而設(shè)計(jì)[3],迭代器是指針的高級(jí)形式。事實(shí)上,指針是數(shù)據(jù)和處理的中介:計(jì)算機(jī)處理的數(shù)據(jù)需要存儲(chǔ),數(shù)據(jù)存儲(chǔ)是為了處理,處理一般通過(guò)指針找到存儲(chǔ)中的數(shù)據(jù)。程序語(yǔ)言的發(fā)展都會(huì)反映在指針的發(fā)展上。
奚:指針這么重要,卻一直令人生畏,問(wèn)題在哪里呢?
王:主要在教學(xué)環(huán)節(jié)上。很多教材都是簡(jiǎn)單地把指針等同于地址,而實(shí)際上,地址和指針的關(guān)系,是低級(jí)機(jī)器語(yǔ)言中的地址和高級(jí)C語(yǔ)言中的指針的關(guān)系,是語(yǔ)言要素從低級(jí)到高級(jí)的發(fā)展。按照辯證法指南,我們只有切實(shí)地研究這個(gè)發(fā)展過(guò)程,才能真正認(rèn)識(shí)指針本身。
奚:那么,指針和地址的關(guān)系應(yīng)該如何描述呢?……