• c语言用指针排序 > 指针是C语言的精华部分
  • 指针是C语言的精华部分

    免费下载 下载该文档 文档格式:DOC   更新时间:2007-12-02   下载次数:0   点击次数:1
    文档基本属性
    文档语言:Simplified Chinese
    文档格式:doc
    文档作者:liutao
    关键词:
    主题:
    备注:
    点击这里显示更多文档属性
    第7章 指 针
    指针是C语言的精华部分,是C语言的重要特征.通过利用指针技术,可以描述各种复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,支持动态内存分配,提供了函数的地址调用和自由地在函数之间传递各种类型的数据等.
    7.1 指针与指针变量
    7.1.1 内存单元,地址和指针
    1.内存单元和地址
    在计算机中,所有的程序和数据都是存放在存储器的内存中.内存的基本单元是字节(Byte),一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等.为了正确地访问内存单元,必须给每个内存单元一个编号,该编号称为该内存单元的地址.
    2.变量与地址
    程序中每个变量在内存会有固定的位置,有具体的地址.由于变量的数据类型不同,它所占的内存单元数也不相同.若我们在程序中做定义为:
    int a=1, b=2;
    float x=3.4, y=4.5;
    double m=3.124;
    char ch1='a', ch2='b';
    让我们先看一下编译系统是怎样为变量分配内存的.变量a , b是整型变量,在内存各占2个字节;x , y是单精度实型,各占4个字节;m是双精度实型,占8个字节;ch1,ch2是字符型,各占1个字节.由于计算机内存是按字节编址的,设变量的存放从内存2A00H单元开始存放,则编译系统对变量在内存的安放情况为图7-1所示.
    变量在内存中按照数据类型的不同,占内存的大小也不同,都有具体的内存单元地址,如变量a 在内存的地址是2A00H,占据两个字节后,变量b的内存地址就为2A02H,变量m的内存地址为2A12H等.
    3.指针
    对内存中变量的访问,过去我们用scanf("%d%d%f",&a,&b,&x)表示将数据输入到变量的地址所指示的内存单元.这种按变量地址存取变量值的方式称为"直接访问"方式.那么,访问变量,首先应找到其在内存中的地址,或者说,一个地址唯一指向一个内存变量,我们称这个地址为变量的指针.如果将变量的地址保存在内存的特定区域,用变量来存放这些地址,这样的变量就是指针变量,通过指针对所指向变量的访问方式称为"间接访问"方式.变量的地址就是指针,存放指针的变量就是指针变量.
    严格地说,一个指针是一个地址,是一个常量.而一个指针变量却可以被赋予不同的指针值,是变量.但通常把指针变量简称为指针.指针是特殊类型的变量,其内容是变量的地址.指针变量的值不仅可以是变量的地址,也可以是其他数据结构的地址.比如在一个指针变量中可存放一个数组或一个函数的首地址.
    在一个指针变量中存入一个数组或一个函数的首地址有何意义呢 因为数组或函数都是连续存放的,通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数.这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指针变量中被赋予数组或函数的首地址即可.这样做将会使程序的概念十分清楚,程序本身也精炼,高效.在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元.用"地址"这个概念并不能很好地描述一种数据类型或数据结构,而"指针"虽然实际上也一个地址,但它却可以是某个数据结构的首地址,它是"指向"一个数据结构的,因而概念更为清楚,表示更为明确.这也是引入"指针"概念的一个重要原因.
    设一组指针变量pa,pb,px,py,pm,pch1,pch2,分别指向上述的变量a,b,x,y,m,ch1,ch2,指针变量也同样被存放在内存,二者的关系如图7-2所示:
    在图7-2中,左部所示的内存存放了指针变量的值,该值给出的是所指变量的地址,通过该地址,就可以对右部描述的变量进行访问.如指针变量pa的值为2A00H,是变量a在内存的地址.因此,pa就指向变量a.
    7.1.2指针变量的定义,赋值与引用
    1.指针变量的定义
    指针变量与C语言其他的变量一样在使用前也必须先加以定义.指针变量
    定义的一般形式为:
    类型说明符 *变量名;
    其中,*表示这是一个指针变量;变量名即为定义的指针变量名;类型说明符表示本指针变量所指对象(变量,数组或函数等)的数据类型.
    例如: int * ptr1; /* ptr1(而不是*ptr1)是一个指向整型变量的指针变量,它的值是某个整型变量的地址.至于ptr1究竟指向哪一个整型数据是由ptr1所赋予的地址所决定的. */
    float * ptr2; /* ptr2是指向单精度变量的指针变量. */

    下一页

  • 下载地址 (推荐使用迅雷下载地址,速度快,支持断点续传)
  • 免费下载 DOC格式下载
  • 您可能感兴趣的
  • c语言指针函数编程题  c语言指针  c语言指针视频教程  c语言指针讲解  c语言指针的用法  c语言函数指针  c语言数组与指针  c语言文件指针  c语言中的指针