the type of a pointer

首先 ,一个指针,不管它指向哪种数据类型,但指针本身所需的内存大小是固定的。(即4个bytes)

有个声明:

class A{

public:

A();

virtual ~A();

virtual void rotate();

protected:

int loc;

String name;

};

A a("Zoey");

A *p=&a;


这里的a是一个类的物件,而p是一个指向类的指针。如果要求这个类的所需内存大小的话。应该是4+8+4。(如果是string是传统的8bytes的话(包括一个4-byte的指针和一个用来表示字符串长度的整数),4是int loc的大小,8是String的大小,后一个4指的是一个Vptr。/*对此,我还有个疑问,这里的vptr是公用的么?因为你可以看到A里有两个virtual func。)。*/ 那么,p所能横跨的地址空间为1000--1015(假设起始地址是1000的话。)。

就以内存需求的观点来说,一个指向类的指针和一个指向整数和一个指向String的指针没有什么不同,他们都需要一个内存单元(我想应该是个4bytes)来存放机器地址(应该是word)。“指向不同类型的指针”间的差异,既不在其指针表示方法不同,也不在其存放内容类型不同(都是一个word型的地址)。而是在其所寻址(operator*)出来的object类型不同,也就是说,“指针类型”会教导编译器如何解释某个特定地址中的内容及其大小。

至此,你应该轻而易举地知道,一个指向地址1000的int型指针,在32位机器上,,他所能涵盖的地址空间,是1000-1003,而当它是个指向上述A类型的指针的话,他说能涵盖的地址空间为1000-1015.嗯,那么如果void*的指针指向地址为1000时,他将涵盖怎样的地址空间呢?这我怎么知道!他只含有一个地址,而不能通过他操作其所指的object的。(/*他存放的是什么地址,他的object又是什么?*/)

所以,cast其实是一种编译器指令。大部分情况下他并不改变指针所含的真正地址,它只影响“被指出之内存的大小和其内容”的解释方式。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值