快速业务通道

C++从零开始之指针及其语义和运用

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

本篇是《C++从零开始》系列的附篇。因友人一再认为《C++从零开始》系列中对指针的阐述太过简略,而提出的各个概念又杂七混八,且关于指针这一C++中的重要概念的运用少之又少,故本篇重点说明在《C++从零开始》系列中提出的数字、地址、指针等基础概念,并给出指针的语义,说明指针和数组的关系,阐述多级指针、多维数组、函数指针、数组指针、成员指针的语义及各自的运用。

数字、操作符、类型、类型修饰符

在《C++从零开始(三)》中已经说明,其实CPU连二进制数都不认识,其只能处理状态,而它能处理的状态恰好能用二进制数表示,故称CPU只认识二进制数。应注意由于CPU认识二进制数是认识其所表示的状态,并不是数学意义上的二进制数,因此CPU并不认识十进制数20.不过将20按数学规则转成二进制数10100后,运气极好地CPU的设计人员将加法指令定义成状态10100和状态10100相加将得到状态101000,而这个二进制数按数学规则转成十进制数正好是40,即CPU连加减乘除都不会,只会以不同的方式改变状态,而CPU的设计人员专门将那些状态的改变方式定义成和数学上的加减乘除一样进而使CPU表现得好像会加减乘除。

所以,为了让CPU执行一条指令,则那条指令所涉及的东西只能是二进制数,就必须有规则将给出的数学意义上的数转换成二进制数。如前面的十进制转二进制的规则,在《C++从零开始(二)》中提到的原码、补码、IEEE real*4等。而要编写C++代码,则一定要在代码中能体现上述的转换规则,并且要能在代码上体现欲被转换的数学意义上的数,这样编译器才能根据我们书写的代码来决定CPU要操作的东西的二进制表示。对此,C++中用类型表现前者,用数字体现后者,用操作符表示CPU的指令,即CPU状态的变换方式。

因此,为了让CPU执行加法指令,代码上书写加法指令对应的操作符——“+”,“+”的两侧需要接两个数字,而数字的类型决定了如何将数字所表示的数学上的数转换成二进制数。应注意数字是编译级的概念,不是代码级的概念,即无法在代码上表现数字,而只能通过操作符的计算的返回来获得数字。因为任何操作符都要返回数字(不返回数字的操作符也可以通过返回类型为void的数字来表示以满足这一说法),而最常见的一种得到数字的操作符就是通常被称作常数的东西,如6.3、5.2f、0772等。我在《C++从零开始(二)》中将其称作数字的确引起概念混淆,在此特澄清。

应注意只要是返回数字的东西就是操作符,故前面的常量也是一种操作符。对于变量、成员变量及函数,在《C++从零开始》系列中已多次强调它们都是映射元素,直接书写变量名、成员变量名和函数名将分别返回各自所映射的数字,即变量名函数名等也都是操作符。

数字是具有类型的,C++提供了自定义类型struct、class等来自定义复杂的类型,但不仅如此,C++还提供了更值得称赞的东西——类型修饰符。在《C++从零开始(五)》中已经说明,类型修饰符就是修饰类型用的,即按某种规则改变被修饰类型(称作原类型)所表征的数字转换规则。如猪血羊血和猪肉羊肉,这里的“血”和“肉”都是类型修饰符,改变其各自的原类型——“猪”和“羊”。上面感觉更像后者修饰前者而非前者修饰后者,如猪血中的“血”是主语而“猪”是定语。即类型修饰符其实是以原类型的信息来修改其自身所表征的那个数字转换规则。这就如称“血”、“肉”是一种东西一样,也说某类型是指针类型、引用类型、数组类型、函数类型等。

在《C++从零开始》系列中共提出下面几种类型修饰符——引用“&”、指针“*”、数组“[]”、函数&ld

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号