C语言学习文档第08章指针(培训).ppt
《C语言学习文档第08章指针(培训).ppt》由会员分享,可在线阅读,更多相关《C语言学习文档第08章指针(培训).ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第8 8章章 指针指针2021/9/2618.1 8.1 变量的地址和指针变量的地址和指针2.2.数据在内存中的存储方式数据在内存中的存储方式:按数据类型在内存为其分配一定数量的按数据类型在内存为其分配一定数量的存储单元存储单元(字节字节)。1.1.内存单元的地址内存单元的地址:计算机的内存是以字节为单位的一片连续的计算机的内存是以字节为单位的一片连续的存储空间,每一个字节都有一个编号,这个存储空间,每一个字节都有一个编号,这个编号就称为内存地址编号就称为内存地址3.3.内存单元的内容:内存单元的内容:即变量的值。即变量的值。2021/9/262例如有定义例如有定义:short int a,
2、b;char c;float x;变量变量a,b,c,x的内存分配的内存分配情况情况:abxc200020012002200320042005200620072008 每个变量的地址是指该变量所占存储单元的每个变量的地址是指该变量所占存储单元的第一个字节的地址,称为指针。第一个字节的地址,称为指针。2021/9/2634.4.计算机中数据存取方式计算机中数据存取方式A A、变量的、变量的“直接访问直接访问”方式:方式:按变量的地址存取变量值的方式。按变量的地址存取变量值的方式。(见下图见下图)i20003直接访问直接访问:编译器自动完成编译器自动完成2021/9/2643i20002000po
3、inter间接访问方式示意图间接访问方式示意图:将将变量的地址变量的地址放在另一个特殊的变量中,先到另放在另一个特殊的变量中,先到另一个变量所表示的存储单元中取得变量的地址,再由一个变量所表示的存储单元中取得变量的地址,再由变量的地址找到变量并进行数据存取变量的地址找到变量并进行数据存取(见下图见下图)。b.b.变量的变量的“间接访问间接访问”方式方式变量变量pointer为指针变量为指针变量,存放的是变量存放的是变量i i的的内存地址内存地址,我们说我们说pointer指向指向 i i。2021/9/2656.指针的概念:指针的概念:一个变量的首地址称为该变量的指针。一个变量的首地址称为该变
4、量的指针。用来专门存储用来专门存储变量指针变量指针的变量称为指针变量。的变量称为指针变量。2021/9/2668.2 8.2 指针与变量指针与变量一一.指针变量的定义指针变量的定义1.定义方式:定义方式:类型标识符类型标识符 *指针变量名指针变量名1,*指针变量名指针变量名2;例:例:float *p1;(定义了定义了p1为指向实型变量的指针变量为指向实型变量的指针变量)char *p2;(定义了定义了p2为指向字符型变量的指针变量为指向字符型变量的指针变量)2021/9/267 标识符前面的标识符前面的“*”“*”,表示该变量为指针,表示该变量为指针 变量。但指针变量名是变量。但指针变量名是
5、*后面的名字(不包后面的名字(不包括括“*”“*”)。)。3.3.说明说明2.指针变量的指针变量的三三要素要素:v指针变量的指针变量的基类型基类型:和其所指变量的类型一致;和其所指变量的类型一致;v指针变量的指针变量的值值:另一个变量在内存的地址;另一个变量在内存的地址;v指针变量的指针变量的名字名字:符合用户标识符规则。符合用户标识符规则。2021/9/268指针变量名指针变量名=某一地址某一地址;8.3.8.3.指针变量的赋值指针变量的赋值方式方式1:指针变量名指针变量名=&变量名变量名;方式方式2:指针变量名指针变量名=另一已经赋值的指针变量另一已经赋值的指针变量;方式方式3:通过标准的
6、库函数(通过标准的库函数(malloc和和calloc在内存中开辟动态存储在内存中开辟动态存储单元)单元)2021/9/269i的地址的地址pi的值的值iqi的地址的地址例如例如:int i,*p,*q;p=&i;/*方式方式1*/q=p;/*方式方式2*/示示意意图图2021/9/2610说明:给指针变量赋说明:给指针变量赋“空空”值值除了给指针变量赋地址值外,还可以给指针变量赋除了给指针变量赋地址值外,还可以给指针变量赋NULLNULL值。值。如:如:p=Nullp=Null;NullNull是在是在stdio.hstdio.h头文件中定义的预定义符。在使用前必须头文件中定义的预定义符。在
7、使用前必须使用预定义行:使用预定义行:#include#include。NullNull的代码值为的代码值为0 0,当执行以上赋值语句后,称当执行以上赋值语句后,称p p为空指针。等价于:为空指针。等价于:p=0;p=0;或或 p=0 p=0注意:这时指针注意:这时指针p p不是指向地址为不是指向地址为0 0的存储单元,而是一个的存储单元,而是一个具有一个确定的值具有一个确定的值“空空”。企图通过一个空指针去访问一。企图通过一个空指针去访问一个存储单元,将会得到一个出错信息。个存储单元,将会得到一个出错信息。2021/9/2611国家等级考试练习国家等级考试练习1.1.已知已知 int a=3
8、,a int a=3,a的地址为的地址为10011001,则,则&a=&a=?100110012.2.设有定义:设有定义:float x;float x;则以下对指针变量则以下对指针变量p p进行定义且赋初值的语进行定义且赋初值的语句中正确的是:句中正确的是:a)float*p=1024;b)int*p=(float)x;c)float p=&x d)float*p=&xa)float*p=1024;b)int*p=(float)x;c)float p=&x d)float*p=&xD D2021/9/26124.4.有以下程序段有以下程序段#include#include main()mai
9、n()int n,*p=NULL;int n,*p=NULL;*p=&n;*p=&n;scanf(“%d”,&p);scanf(“%d”,&p);printf(“%dn”,p);printf(“%dn”,p);该程序试图通过该程序试图通过P P为变量为变量n n读入数据并输出,但程序有多出错误,读入数据并输出,但程序有多出错误,以下语句正确的是:以下语句正确的是:a.int n,*p=NULL b.*p=&n a.int n,*p=NULL b.*p=&n c.scanf(“%d”,&p)d.printf(“%dn”,p);c.scanf(“%d”,&p)d.printf(“%dn”,p);A
10、 A2021/9/26138.4.8.4.对指针变量的操作对指针变量的操作1.1.通过指针来引用一个存储单元通过指针来引用一个存储单元 C C语言提供了一个称作语言提供了一个称作“间接访问运算符间接访问运算符”(”(间接运算符)的单目间接运算符)的单目运算符:运算符:“*”“*”,当指针变量有确切的地址值时,就可以通过间接,当指针变量有确切的地址值时,就可以通过间接访问运算符引用该地址指向的存储单元。访问运算符引用该地址指向的存储单元。如:如:int*p,i=10,j;int*p,i=10,j;p=&i;p=&i;j=*p;j=*p;说明:把说明:把p p所指向的存储单元(所指向的存储单元(i
11、 i)的值赋给)的值赋给j j,*p*p代表代表p p所指向的所指向的变量变量i i,以上语句等价于:,以上语句等价于:j=i j=i;2021/9/2614分析以下表达式的含义:分析以下表达式的含义:j=*(&i);j=*p+1;j=*(&i);j=*p+1;*p=100;*p+=1;*p=100;*p+=1;+*p;(*p)+;+*p;(*p)+;int*p,i=10,j;int*p,i=10,j;p=&i;p=&i;j=*p;j=*p;例子:例例子:例8.18.12021/9/26152.算术运算算术运算(移动指针)移动指针)例如例如:int *p,i;char *q,c;p=&i;q=
12、&c;.i10001001100220002001cpq.i10001001100220002001cpq /*/*运算示例运算示例*/*/p+;q+;对指针进行加减运算时,数字对指针进行加减运算时,数字“1”“1”不代表十进制整数不代表十进制整数“1”“1”,即不是移动一个字节,而是移动一个存储单元长度。即不是移动一个字节,而是移动一个存储单元长度。2021/9/2616例如例如:右图右图1 pq为为假。假。.i10001001100220002001cpq.400040014002400340184019pqa0a1a9例如例如:右图右图2int a10;int*p,*q;p=&a0;/*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学习 文档 08 指针 培训
限制150内