本文是自己学习所做笔记,欢迎转载,但请注明出处: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指针决心 ------ 指针的概念和元素的更多相关文章

  1. C指针决心 ------ 指针表达式

    本文是自己学习所做笔记.欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 所谓的指针表达式是指一个表达式.其结果是一个指针. 例1. int  a,b; ...

  2. C基础知识(3):指针--概念、数组中指针的递增/递减、指针数组&数组指针、指向指针的指针

    指针是一个变量,其值为另一个变量的地址. 所有指针的值的实际数据类型,不管是整型.浮点型.字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数. 下面从4个代码例子分别讲述以下 ...

  3. (C/C++)区别:数组与指针,指针与引用

    1.数组跟指针的区别 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变. 指针可以随时指向任意类型 ...

  4. 指针的引用(*&)与指针的指针(**)

    指针的引用(*&)与指针的指针(**) 在下列函数声明中,为什么要同时使用*和&符号?以及什么场合使用这种声明方式? void func1( MYCLASS *&pBuildi ...

  5. #运算符、不同的指针类型、数组和指针、指针运算、堆、栈、静态区、只读区、下标VS指针

    #运算符:用于在预编译期将宏参数转换为字符串 #define CONVERS(x)  #x   //注:没用双引号包括. 不同类型的指针占用的内存空间大小相同. 局部变量 定义: a[5]; 打印a[ ...

  6. C++语言中数组指针和指针数组彻底分析

    #################################                              ##       基本知识               ##        ...

  7. (转)指针的引用(*&)与指针的指针(**)

    本文转载而来,转载出处:http://www.cppblog.com/doing5552/archive/2010/09/28/127994.html 在下列函数声明中,为什么要同时使用*和& ...

  8. 让你不再害怕指针——C指针详解(经典,非常详细)

    http://blog.csdn.net/soonfly/article/details/51131141 前言:复杂类型说明 要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理 ...

  9. C++中的指针、数组指针与指针数组、函数指针与指针函数

    C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从刚開始学习的人的角度,深入浅出地具体解释什么是指针.怎样使用指针.怎样定义指针.怎样定义数组指针和函数指针.并给出相应的实例演示.接着,差 ...

随机推荐

  1. hdu4283(区间dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4283 题意:有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D.但是边 ...

  2. ARM体系结构与编程

    ARM处理器的7中执行模式:usr.fiq.irq.svc.abt.und.sys. ARM处理器共37个寄存器:31个通用寄存器(未备份寄存器R0-R7,在全部模式下指的都是同一个物理寄存器:备份寄 ...

  3. Java LinkedBlockingQueue和ArrayBlockingQueue分析

    LinkedBlockingQueue是一个链表实现的堵塞队列,在链表一头增加元素,假设队列满.就会堵塞.还有一头取出元素.假设队列为空.就会堵塞. LinkedBlockingQueue内部使用Re ...

  4. finger用户名、主目录、停滞时间、登录时间

    finger yum install finger    1.作用    finger用来查询一台主机上的登录账号的信息,通常会显示用户名.主目录.停滞时间.登录时间.登录Shell等信息,使用权限为 ...

  5. Java EE (8) -- Java EE Patterns

    Java EE 模式目录由以下三个层组成: –     整合层(4) –     业务层(9) –     表示层(8) 涉及 Java EE 平台代码与其它类型应用程序或遗留系统的集成: 服务激活器 ...

  6. Ansj配置指南!

    =.= 折腾死 ①你想要http://maven.ansj.org/org/ansj/ansj_seg/找一个尽可能高的版本号,比方2.0.7,点进去之后找到相应的jar,比方ansj_seg-2.0 ...

  7. Codeforces Round#308

    A题,看样例就知道要求什么,   水过去 #include <stdio.h> #include <string.h> #include <stdlib.h> #i ...

  8. 如何设置一个activity透明(转)

    1.在AndroidManifest.xml文件中设置: ? 1 android:theme="@android:style/Theme.Translucent 此代码固定为全背景透明. 2 ...

  9. php文件操作基本使用方法

    <?php /* $fp=fopen("tmp.html","r"); $str=fread($fp,filesize("tmp.html&qu ...

  10. android 编译调用C代码

    博客地址:www.zalezone.cn 前言 需求来源 这几天帮别人做一个简单的androidclient,也没什么功能,主要就是调用C代码来对手机的Wifi网络进行设置.于是也就引出了技术难点所在 ...