本文是自己学习所做笔记,欢迎转载,但请注明出处: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. HTML5: Screen Orientation API

    媒体的询问取决于智能手机和平板布局调整的方向一致网站.但有时候你被锁定在一个希腊网站特定方向.横向或纵向.此时,是本机格式可以指定保健应用. APP只显示在一个预设格式-独立于实际设备方向.通过使用H ...

  2. Django URL 命名空间

    https://docs.djangoproject.com/en/1.5/topics/http/urls/#introduction 译文: URL 命名空间 简介: 当你需要部署一个应用的多个实 ...

  3. Effective C++ 条款24

    若全部參数皆需类型转换,请为此採用non-member函数 我们直奔主题 假设你定义一个有理数类例如以下 class Rational{ public: Rational(int numerator= ...

  4. 飘逸的python - __new__、__init__、__call__傻傻分不清

    __new__: 对象的创建,是一个静态方法.第一个參数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个參数是sel ...

  5. Java虚拟机几个命令行参数说明

    一.运行class文件 执行带main方法的class文件,Java虚拟机命令参数行为: java <CLASS文件名> 注意:CLASS文件名不要带文件后缀.class 例如: java ...

  6. Java设计模式之认识阶段

    设计模式是什么? 设计模式(Design pattern)是一套被重复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 其本质就是继承与接口的组合应用. 为什么要用设计模? 使用设计模式是为了 ...

  7. js中 正則表達式

    正則表達式使用具体解释 简单介绍 简单的说,正則表達式是一种能够用于模式匹配和替换的强有力的工具.其作用例如以下: 測试字符串的某个模式.比如,能够对一个输入字符串进行測试,看在该字符串是否存在一个电 ...

  8. 对于Web开发来说 8 个最好的跨平台编辑器

    1) Best Cross Platform IDE - Brackets Brackets是一个在前端Web开发和设计人员中最流行的开放源代码IDE/代码编辑器之中的一个.它拥有一些有用工具可以将H ...

  9. 6月27日CTO俱乐部下午茶印象

    作者:朱金灿 来源:http://blog.csdn.net/clever101 感谢CSDN的邀请,有幸参加了6月27日“CTO俱乐部下午茶时光:CTO在团队管理中所遇到的那些事”活动.本期的主讲嘉 ...

  10. JBOSS EAP6.2.0的下载安装、环境变量配置以及部署

    JBOSS EAP6.2.0的下载安装.环境变量配置以及部署 JBoss是纯Java的EJB(企业JavaBean)server. 第一步:下载安装 1.进入官网http://www.jboss.or ...