原文链接
指针的类型
分为指针本身的类型和指针所指向的类型
int *ptr; //指针的类型是int *, 指针所指向的类型是int
char *ptr; //指针的类型是char *. 指针所指向的的类型是char
int **ptr; //指针的类型是 int **, 指针所指向的的类型是 int *
int (*ptr)[3]; //指针的类型是 int(*)[3] 指针所指向的的类型是 int()[3]
int *(*ptr)[4]; //指针的类型是 int *(*)[4] 指针所指向的的类型是 int *()[4]
指针的算术运算中,指针所指向的类型有很大的作用
指针的值
指针的值被编译器当做一个地址,而不是一个一般的数值。在32位程序中指针的值就是一个32位证书。
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区域,相当于说是该指针的值就是这块区域的首地址。
指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。
例子
int *ptr;
char *ptr;
int **ptr;
int (*ptr)[3];
int *(*ptr)[4];