1、第 9章 指针* 1 1C语言程序设计 第 9 章 指针引例 A.B.C三人欲借用某旅馆的一个房间 ,A先到达 ,在旅馆的服务台登记房间 ,房号是 5818,然后 A打电话通知了 B,但是没有通知 C,问 B和 C怎么找到 A?B可以直接到 5818房间找到 AC到旅馆服务台查询 A的房号为 5818,然后再找到 A2C语言程序设计 第 9 章 指针9.1 地址和指针的概念 一、变量的地址计算机中 ,数据存储在内存中 .内存可以划分为若干个存储单元 ,每个存储单元可以存放 8位 bit二进制数 ,即 1个字节 byte.内存当中采用线性地址编码 ,每个单元具有唯一一个地址编码 .1、变量的地址
2、 : 系统为变量单元分配的内存地址 一个无符号整数int a;float b;a=3;b=5;a3AB0b3AC02、 变量的属性存储内容 : 数据值空间大小 : 数据类型空间位置 : 地址生存周期 : 存储类别3 53C语言程序设计 第 9 章 指针9.1 地址和指针的概念二、变量的访问方式1、直接访问2、间接访问 : 定义一个变量 p,存放 a的地址 ,通过 p来访问 aint afloat ba=3;b=5;若将 p中地址换成 3AC0(B的地址 ),则可以通过 p来访问 B3a3AB05b3AC03AB0p4C语言程序设计 第 9 章 指针9.1 地址和指针的概念三、指针变量指针变量是
3、 存放地址的变量;如何定义 p?如何获得变量 a的地址 ,即 p中的内容?如何通过 p来访问 a?如 :p为指针变量 ,它存放整型变量 a的首地址 ,则称 指针变量 p指向整型变量 a。3a3AB05b3AC03AB0p5C语言程序设计 第 9 章 指针9.2 指针变量的定义与引用 一、定义方法 类型符 *指针变量名指针变量的类型 :指针所指向内存单元中存放的数据的类型 .int *p1,*p2;char *ps;float *pf1,*pf2;(1)用变量地址给指针变量赋值 (使用到地址符 p=注 :变量的类型必须与指针变量类型相同(2)用相同类型的指针变量赋值 int *p1, *p2,
4、a;p1=p2=p1;注 :若不赋值 ,则指针变量的值是随机的 .(3)赋空值 NULL*p1;p1=NULL;或p1=0;int *p1=NULL;float a;float *p2=char ch, *p3=6C语言程序设计 第 9 章 指针9.2 指针变量的定义与引用 三、指针变量的应用1.两个有关的运算符 : * , *p表示指针变量 p所指向的内存单元中的数据 . 如果: p= *pa 将指针变量 指向 被访问的变量如 : int a=5, *p, b;p=应用 : 通过指针变量指向所指的变量 ,即通过 p访问 a;( 步骤) 访问 所指变量取内容 : b=*p;printf(“%d
5、n”,b ); 存内容 :*p=100;例 9-1void main()int a=5, b=3;int *p;p=b=*p+5;printf(“%dn”,b );*p=4;printf(“%d,%dn ”, a,*p);注意 :*p若出现在 “=”右边 或其他表达式中则为 取内容 ;*p若出现在 “=”左边 则 存内容 ,即向内存中 写数据 .7C语言程序设计 第 9 章 指针9.2 指针变量的定义与引用 三、指针变量的应用2.运算规则printf(“%d,%dn ”,*p+, *(q+);p=printf(“%d,%dn ”, *p,(*q)+);若有 : int a=5, *p=写出下面
6、表达式的结果 ,并找出等价的表达式int *pa, *pb, *pc;pa= pb= pc=scanf(“%d%d ”, pa, pb);printf(“a=%d, b=%dn”, *pa, * pb);c=a+b; printf(“c=%dn”, *pc);*pc=a+*pb; printf(“c=%dn”, c);c=*pa * *pb; printf(“c=%dn”, c);c=+*pa + (*pb)+; printf(“c=%dn”, c);c=(*pa)+ + *pb; printf(“c=%dn”, c);printf(“a=%d, b=%dn”, a, b);假设输入为 : 2 39C语言程序设计 第 9 章 指针例 9-3 交换两个数 a, b的值#include void main()int a=5, b=8;int t;printf(“a=%d, b=%dn”, a, b);t=a;a=b;b=t;printf(“a=%d, b=%dn”, a, b);例 9-3 交换两个数 a, b的值#include void main()int a=5, b=8;int *pa=int t; printf(“a=%d, b=%dn”, a, b);t=*pa;*pa=*pb;*pb=t;printf(“a=%d, b=%dn”, a, b);10