C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt

C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt

ID:50083420

大小:570.50 KB

页数:79页

时间:2020-03-08

C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt_第1页
C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt_第2页
C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt_第3页
C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt_第4页
C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt_第5页
资源描述:

《C语言程序设计 教学课件 作者 刘明才 第8章 指针.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章指针指针的基本概念指针与一维数组指针与二维数组指针与字符串指针与函数指针数组与多级指针第页共79页8.1指针的基本概念变量的地址及指针指针变量指针运算指针作为函数的参数第页共79页8.1.1变量的地址及指针计算机的内存是以字节为单位的一片连续的存储区域,每一个字节都有一个编号,这个编号称为内存地址(address)。就像旅馆的每个房间都有一个房间号一样,如果没有房间号,旅馆的工作人员就无法进行管理;同样道理,没有内存字节的编号,系统就无法对内存进行管理。第页共79页C语言中定义的每个变量都被分配了确定的存储区域,它们占一个或多个字节,每个变量所占存储区域第一

2、个字节的地址称为该变量的地址。存储在变量中的内容(即数据)称为变量的值。假设有如下程序:#includevoidmain(){inta=10;floatx=20.5;…}第页共79页在上面的程序中分别定义了int型变量a和float型变量x,变量所占的字节数由变量的类型决定,变量a占2个字节,变量x占4个字节。假设编译时系统分配地址为2000和2001的两个字节给变量a,分配地址为2002~2005的4个字节给变量x,则变量a的地址为2000,变量x的地址为2002。变量、内容及地址示意图,如图所示。第页共79页变量、内容及地址示意图第页共79页

3、8.1.2指针变量指针变量的定义指针变量定义的一般形式:类型标识符*变量名;其中“类型标识符”定义指针变量的类型,变量名前的“*”表示定义的变量是一个指针变量。例如:int*p1,*p2;定义了2个指针变量p1、p2,它们只能存放int型变量的地址。在定义指针变量时可以对其进行初始化,例如对如图所示的关系可定义如下:inta;int*p=&a;或inta,*pa=&a;上述语句的作用是定义int型变量a和指向int型数据的指针变量p(即p中只能存放int型变量的地址),同时给p赋值为变量a的地址。其中&a是取变量a的地址。第页共79页指针变量与变量间的指向关系第页

4、共79页指针变量的引用指针变量的使用与两个运算符“&”、“*”有密切关系。(1)&:取地址运算符,用于求变量在内存中的地址,运算符的操作对象必须是存储单元(如变量、数组元素等)。(2)*:指针运算符(或称间接访问运算符),间接访问指针变量指向的对象。运算符的操作对象必须是指针。例如:inta=6,*pa;/*定义pa为指向int型数据的指针变量*/pa=&a;/*将a的地址赋给pa*/*pa=28;/*将28赋给pa指向的变量a*/当指针变量pa指向变量a时,引用变量a可用*pa表示,即表示通过指针变量pa间接引用变量a。此时*pa与变量a表示的是同一个存储单元,

5、如果改变*pa的值就是改变了a的值。第页共79页【例】取地址运算符&和指针运算符*的简单使用。程序如下:#includevoidmain(){inta=100,*pa;pa=&a;/*把变量a的地址赋给pa*/printf("a=%d,*pa=%d",a,*pa);a=200;printf("a=%d,*pa=%d",a,*pa);}运行结果如下:a=100,*pa=100a=200,*pa=200第页共79页使用指针应注意的几种情况在指针变量中只能存储地址指针变量中存储的地址,必须是已明确定义过的对象地址(如变量、数组等)。例如:int

6、a,*p,*q;p=2000;/*不正确*/q=&a;/*正确*/其中p=2000是不正确的。初学者可能会想,这是把内存中编号为2000的存储单元地址赋值给变量p。但事实上程序运行时所需存储区域的具体分配不能由用户指定,必须由系统来管理分配。因此必须先定义对象,才能把对象的地址存储到指针变量中。第页共79页初始化指针变量与用赋值表达式给指针变量赋值在表示方法上的区别语句“inta,*p=&a;”与“inta,*p;p=&a;”是等价的。它们都定义a是int型变量,定义变量p为指向int型数据的指针变量,并且使p指向a。但“inta,*p;*p=&a;”中的赋值语句

7、是错误的。错在把定义语句“int*p=&a”与赋值语句“*p=&a”混淆。在定义语句中变量名前的“*”是用于指明所定义的变量p是一个指针变量,&a值是存放到p中;而赋值语句中变量名前的“*”是间接访问运算符,表示利用指针变量p,间接访问它所指向的对象,&a值是存放到p指向的对象*p中。第页共79页悬挂指针指针变量的值不确定的指针称为悬挂指针。在定义语句中如果没有对指针变量p初始化,变量p中的地址值是不确定的,那么p就是悬挂指针。如果有int*p;即此时p是悬挂指针,语句“*p=56;”将如何执行?不同版本的C语言处理系统可能对此将作不同处理;一种处理方式是编译显示

8、出错信息;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。