1、华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计第 6章 指针6.1 指针概念 6.2 指针变量的定义和使用6.3 指针运算6.4 指针与数组及字符串 6.5 指针数组和多级指针 华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计6.1 指针概念6.1.1 变量的地址程序一旦被执行,则该程序的指令、常量和变量等都要存放在计算机的内存中。计算机的内存是以字节为单位的一片连续的存储空间,每个字节都有一个编号,这个编号就称为内存的地址。注意 : 存储单元的地址和它里面存放的内容完全是两回事 。 华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计
2、如果在程序中用说明语句定义了一个变量,系统会根据变量的数据类型给它分配一定大小的内存空间 。例如 : 在一个源程序中定义了如下变量 : short a = 3; int b = 100; long int c = 8; char d = a; 10010021006100A310010008a系统给变量 a分配的地址是 1000,变量 b分配的地址是1002,变量 c分配的地址是 1006变量 d分配的地址是 100A,得到如上图所示的内存示意图。华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计6.1.2 指针变量 除了前面介绍的普通变量之外,还使用另外一种特殊性质的变量,
3、即 指针变量 。指针变量是存放地址的变量。 它和普通变量一样占用一定的存储空间。但是,它与普通变量 不同之处 在于,指针变量的存储空间中存放的不是普通的数据,而是一个地址,例如一个变量的首地址。华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计设某指针变量的名字是 px,同时存在另外一个名字为 x的普通变量 ,将变量 x的地址送入指针 px的存储区域,即 px的内容就是变量 x的地址,如下图所示:因此我们可以看出, 访问一个变量有两种方法 :( 1)通过变量本身直接访问,( 2)通过指向该变量的指针间接访问。华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计
4、6.2 指针变量的定义和使用6.2.1 指针变量的定义及初始化 1 . 指针变量的定义 指针变量在程序中使用之前,必须进行定义。 *指 针 名 ;例如 : int *px;char *name;static int *pa;上面定义了名字为 px, name和 pa的三个不同类型指针。变量名由用户命名,使用字符的起名规则与变量名相同。华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计指针变量的存储类型是指针变量本身的存储类型。它与普通变量一样,分为:auto(可以缺省)registerstaticextern不同存储类型的指针使用的存储区域不同,这与普通变量完全相同。指针的存
5、储类型和指针说明的程序位置决定了指针的寿命和可见性。即指针变量也分为 内部 的和 外部 的,全局 的和 局部 的。华中科技大学信息学院华中科技大学信息学院 C语言程序设计语言程序设计2 . 指针变量的 初始化 /赋初值指针变量在定义的同时,也可以被赋予初值,初始化时赋予它的初值必须是地址量 :*指 针 名 =初始地址 值 ;例如: int *pa=它把变量 a的地址作为初值赋予了 int型指针 pa。注意 : 从表面上看,似乎把一个初始地址量赋给了指针的目标变量 *pa。其实不然,初始化形式中 *pa=int *p=int *q=p;指针变量中只能存放地址,不要将一个整型量赋给一个指针变量,下面的赋值是不合法的:int *pointer=1000;