首页 > 代码库 > C指针解析 ------ 指针的概念及要素

C指针解析 ------ 指针的概念及要素

       本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020 

   

   指针在C语言中的地位,不用多说。

指针的概念

   指针是一个特殊的变量,它里面存储的数值被解释成为内存中的一个地址。指针有四个要素,分别是指针的类型,指针所指向的类型,指针的值或者指针所指向的内存区,还有指针本身所占据的内存区。所以要理解指针,就必须要搞清楚这四个要素。下面分别来说。
 
   先来看一个例子,通过例子来直观的看指针这四个要素到底代表什么:
         例1.

 (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个字节的长度。

以上就是关于指针的概念及指针的四个要素,这对于理解指针,及对于指针的操作来说至关重要。




  

C指针解析 ------ 指针的概念及要素