指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。分别说明。
先声明几个指针放着做例子:
int *ptr
char *ptr
int **ptr
int (*ptr)[3]
int *(*ptr)[4]
2、指针的类型
从语法的角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。看看下面各个指针的类型:
int *ptr //指针的类型是int *
char *ptr //指针的类型是char *
int **ptr //指针的类型是 int **
int (*ptr)[3] //指针的类型是 int(*)[3]
int *(*ptr)[4] //指针的类型是 int *(*)[4]
3、指针所指向的类型
当通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。从语法上看,只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:
int *ptr //指针所指向的类型是int
char *ptr //指针所指向的的类型是char
int **ptr //指针所指向的的类型是 int *
int (*ptr)[3] //指针所指向的的类型是 int()[3]
int *(*ptr)[4] //指针所指向的的类型是 int *()[4]
在指针的算术运算中,指针所指向的类型有很大的作用。