本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020
指针在C语言中的地位,不用多说。
指针的概念
指针有四个要素,各自是指针的类型,指针所指向的类型,指针的值或者指针所指向的内存区,还有指针本身所占领的内存区。所以要理解指针。就必需要搞清楚这四个要素。
以下分别来说。
(1) int *ptr;
(2) char *ptr;
(3) int **ptr;
(4) int (*ptr)[3];
(5) int *(*ptr)[4];
指针的四要素
1. 指针的类型
从语法的角度看。要得到指针的类型,仅仅须要把指针声明语句里的指针名字取掉就可以,而剩下的部分就是这个指针的类型。这是指针本身所具有类型。和指针所指向的类型不同。
按这种解释来看上面样例各指针的类型:
(1) int *ptr; // 指针的类型为int*
(2) char *ptr; // 指针的类型为char*
(3) int **ptr; // 指针的类型为int**
(4) int (*ptr)[3]; // 指针的类型为int (*)[3]
(5) int *(*ptr)[4]; // 指针的类型为int *(*)[4]
2. 指针所指向的类型
当通过指针来訪问指针所指向的内存区时,指针所指向的类型决定了编译器将那片内在区里的内容当做什么来看待。
从语法的角度看,要得到指针所指向的类型,仅仅须要把指针声明语句中的指针名字和名字左边的的指针声明符*去掉就可以。而剩下的部分就是指针所指向的类型。这样解释后再来看上面的样例中各指针所指向的类型:
(1)int *ptr; // 指针所指向的类型为int
(2) char *ptr; // 指针所指向的类型为char
(3) int **ptr; // 指针所指向的类型为int*
(4) int (*ptr)[3]; // 指针所指向的类型为int ()[3]
(5) int *(*ptr)[4]; // 指针所指向的类型为int *()[4]
注意:
指针的类型(即指针本身的类型)和指针所指向的类型是两个不同的概念,依据其识别方法来差别两者。
3. 指针的值
指针的值,也叫做指针所指向的内存地址或内存区。
指针的值是指指针本身存储的值。这个值将被编译器当作一个地址。而不是一个一般的数值,在32位的程序里,全部类型的指针的值都是一个32位整数.。假设是64位系统。则指针的值就是一个64的位整数。
指针所指向的内存区就是从指针的值所代表的那个内存地址開始,长度为sizeof(指针所指向的类型)的一片内存区。
通常我们说一个指针的值是x,则相当于说明了该指针指向了以x为首地址的内存区域。就相当于说该指针的值就是这块内存区域的首地址。
注意:
指针所指向的内存区和指针所指向的类型是两个全然不同的概念。
就拿上面的样例来说。指针所指向的类型已经有了。可是因为指针并未初始化,所以它所指向的内存区是不存在的。
4. 指针本身所占领的内存区
指针本身占了多少内存,能够用sizeof(指针的类型)就能够知道了,在32位系统里,指针本身占了4个字节的长度。以上就是关于指针的概念及指针的四个要素,这对于理解指针。及对于指针的操作来说至关重要。