指针是一个数值为地址的变量(或更一般的说是一个数据对象),正如char类型的变量用字符作为其数值,而int类型变量的数值是整数,指针变量的数值表示的是地址。
将某个指针变量命名为ptr
1 ptr = & pooh; /*把pooh的地址赋给ptr*/
对于这个语句,我们称ptr“指向”pooh。
ptr和&pooh的区别在于:ptr是个变量,pooh是一个常量。
当然,ptr可以指向任何地方:
ptr = & bah; /*令ptr指向bah而不是pooh*/
这时ptr的值是bah的地址。
要创建一个指针变量,首先要声明其类型。假设欲把ptr声明为可以存放一个int数值的地址,就需要使用间接运算符。
假定ptr指向bah,如下所示:
1 ptr = & bah;
这时就可以使用间接运算符获取bah中存放的数值。
val = * ptr; /*得到ptr指向的值*/
语句ptr = &bah;以及语句val = * ptr;放在一起等同于下面的语句:
1 val = bah;
由此看出,使用地址运算符和间接运算符可以间接完成上述语句的功能,这也正是“间接运算符”名称的由来。
指针的声明:
pointer ptr; /*不能这样声明一个指针*/
原因是这对于声明一个变量为指针是不够的,还需要说明指针所指向变量的类型。
不同的变量类型占用的存储空间大小不同 ,而有些指针操作需要知道变量类型所占用的存储空间。
同时,程序也需要了解地址中存储的是何种数据。
例如,long和float两种类型的数值可能使用相同大小的存储空间,但是他们的数据存储方式完全不同。
1 int * pi; /*pi是指向一个整数变量的指针*/ 2 char * pc; /*pc是指向一个字符变量的指针*/ 3 float * pf, * pg; /*pf和pg是指向浮点变量的指针*/
类型表示符表明了被指向变量的类型,而表示该变量为一指针。
声明intpi;
意思是pi是一个指针,而且pi是int类型的。