概述
从指针所关联的数据类型方面看,指针可以分为三类:指向数据对象的指针 (Object Pointer)、指向函数的指针(Function Pointer)、指向虚无的指针(void*类型)。前两都与内存中的实体(数据和一段函数的执行代码)有关,而void*类型的指针则仅仅是一个值,是纯粹的地址。“指针就是地址”这样的说法对于void*这种类型的指针是成立的。但对于与内存中的实体相关联的指针类型来说这种说法是极其片面的,甚至片面到了几乎完全忽略了指针的本质而只剩下了指针的皮毛的地步。正确的说法是,指针的值(右值)是地址,这与“指针就是地址”是完全不同的概念。
从所具有的运算方面看,这三类指针各自拥有不同的运算种类的集合。有的运算种类多些,有的少些。1
格式指针变量按其指向可分为三类。
(1)指向变量的指针变量。声明格式:
类型*指针变量的名字;
(2)指向函数的指针变量。声明格式:
类型(*指针变量的名字)O;
(3)指向行的指针变量。声明格式:
类型(*指针变量的名字)[常量];
初学者容易把声明指向行的指针变量和声明指针数组相混淆。指针数组的元素是指针变量,声明指针数组的格式是:
类型*数组名[常量];
另外,初学者容易把声明指向函数的指针变量和声明返回地址的函数原型相混淆。声明返回地址的函数原型是:
函数*函数名字(参数列表)。2