对指针的认识:
每个指针都有一个相关的类型。不同数据类型的指针之间的区别不是在指针的表示上,也不在指针所持有的值(地址)上——对所有类型的指针这两方面都是相同的。不同之处在于指针所指的对象的类型上。指针的类型可以指示编译器怎样解释特定地址上内存的内容,以及该内存区域应该跨越多少内存单元。当指针持有0值时,表明它没有指向任何对象。
指针不能被初始化或赋值为其他类型对象的地址值。例如:不是说int类型的指针在物理上不能持有与double相关联内存的地址,它能够。但是不允许,因为虽然int型的指针和double型的指针能够持有同样的地址值,但对那块内存的存储布局和内容的解释却完全不同。
当然,如果我们要做的仅仅是持有地址值(可能是把一个地址同另一个地址作比较),那么指针的实际类型就不重要了。C++提供了一种特殊的指针类型来支持这种需求:空(void*)类型指针,它可以被任何数据指针类型的地址值赋值(函数指针不能赋值给它)。
void*表明相关的值是个地址,但该地址的对象类型不知道。我们不能够操作空类型指针所指向的对象,只能传送该地址值或将它与其他地址值作比较。
指针可以让它的地址值增加或减少一个整数值,例如:加法指针加2意味着给指针持有的地址值增加了该类型两个对象的长度。