C课件第讲全能版.ppt

上传人:本田雅阁 文档编号:2037534 上传时间:2019-02-07 格式:PPT 页数:22 大小:652.01KB
返回 下载 相关 举报
C课件第讲全能版.ppt_第1页
第1页 / 共22页
C课件第讲全能版.ppt_第2页
第2页 / 共22页
C课件第讲全能版.ppt_第3页
第3页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C课件第讲全能版.ppt》由会员分享,可在线阅读,更多相关《C课件第讲全能版.ppt(22页珍藏版)》请在三一文库上搜索。

1、第十三讲,Begin:,第八章 指针,指针和指针变量的概念 变量的指针和指向变量的指针变量,8.1.1 地址和指针,存储单元:存放一个字节数据的存储器。 存储单元的内容:存储单元中存放的数据。 存储单元的地址:存储单元的编号。 变量的首地址:变量占据的连续存储单元的起始地址,简称变量的地址。 指针:存储单元的地址,是一个常量。,8.1.1 地址和指针,int i; char ch; float f;,i = 1; ch = A; f = 2.5;,8.1.2 指针变量,指针变量是专门用来存放内存单元地址的特殊变量。当把某个变量i的地址存入指针变量p后,我们就说这个指针变量p指向该变量i。,指向

2、,1000,i的地址存入p,int i = 10, *p;,p = ,指针与指针变量的区别,就是变量值与变量的区别,即指针变量的值是指针。例如,可以说变量i的指针是1000,但不能说变量i的指针变量是1000。,8.1.2 指针变量,对内存单元的访问有两种方式: 直接访问:直接根据变量名存取变量的值。 间接访问:将变量的地址存放在指针变量中,当要对变量进行存取时,首先读取指针变量的值,得到要存取变量的地址,再对该变量进行访问。,8.2.1 指针变量的定义,定义格式: 类型说明符 *指针变量名; 其中类型说明符指的是指针变量所指向变量的数据类型, “*”表示随后的变量是指针变量。 例如:int

3、*ptr1; char *ptr2; ptr1是指向整型变量的指针变量,专门用来存放整型变量的地址。 ptr2是指向字符型变量的指针变量,专门用来存放字符型变量的地址。,8.2.1 指针变量的定义,说明: 1)指针变量中只能存放地址(指针),不能和整型 变量混淆。例如下面写法是错误的: int *ptr1; ptr1 = 1000; 指针变量可以取值为0(NULL),表示该指针变量不指向任何变量。 2)指针变量只能存放与它数据类型相同的变量的地址。例如下面写法是错误的: int *ptr1; char ch; ptr1 = ,8.2.2 指针变量的引用,指针变量可以通过一对互逆的运算符进行引用

4、。 取地址运算符“ /*将变量ch的地址赋给指针变量ptr2*/,8.2.2 指针变量的引用,指针运算符“*” 作用:间接存取指针变量所指向变量的值。 例如:int i, *ptr1; char ch, *ptr2; ptr1 = ,8.2.2 指针变量的引用,说明: 1)定义语句中的“*”和执行语句中的“*”含义不同,定义语句中的“*”说明定义的是一个指针变量,而执行语句中的“*”表示间接存取指针变量所指向变量的值。 2)指针变量中必须存放了确定的地址值后才能进行指针运算。例如下面写法是错误的: int *ptr1; *ptr1 = 10; ptr1中存放的是一个随机的地址值,该地址有可能是

5、系统程序已占用存储单元的地址,将10赋值给ptr1所指向对象后,原来的数据被更新,系统有可能遭到很严重的破坏。,8.2.2 指针变量的引用,例 指针运算符的使用,#include void main( ) int a=50, *p; p= ,程序运行结果: *p=50, p=fff4 a=100, &a=fff4,8.2.3 指针变量的初始化,一般格式: 类型说明符 *指针变量名 = 初始地址值; 例如:int i, *ptr1 = 说明: 1)任何指针变量在使用之前必须初始化,使指针变量指向一个确定的内存单元,未经初始化的指针变量禁止使用。 2)必须使用同类型变量的地址进行指针变量的初始化。

6、,8.2.4 指针变量的运算,实质:地址的运算 类型: 指针变量赋值 指针变量加/减一个整数 两个指针变量比较 两个指针变量相减,8.2.4 指针变量的运算,1. 指针变量赋值:将已存在对象的地址赋给指针变量 例 交换两个指针变量所指向变量的值 #include void main( ) int *p1, *p2, x1=10, x2=20, t; p1= ,程序运行结果: *p1=10, *p2=20 *p1=20, *p2=10 x1=20, x2=10,8.2.4 指针变量的运算,程序运行结果: *p1=10, *p2=20 *p1=20, *p2=10 x1=10, x2=20,例 交

7、换两个指针变量的值 #include void main( ) int *p1, *p2, *t=NULL, x1=10, x2=20; p1= ,8.2.4 指针变量的运算,2. 指针变量加/减一个整数:指向另一个存储单元 例 移动指针变量访问数组元素 #include void main( ) int a10=1, 3, 5, 7, 9, 11, 13, 15, 17, 19; int n=6, *p1, *p2; p1=p2= ,程序运行结果: 1) *p1=1, *p2=1 2) *p1=13, *p2=3 3) *p1=9, *p2=17,8.2.4 指针变量的运算,3. 两个指针变

8、量比较:对两个指针变量中存放的地址进行比较 例 比较指针变量逆序数组元素 #include void main( ) int a10=1, 3, 5, 7, 9, 11, 13, 15, 17, 19; int *p1= ,程序运行结果: a0=19 a1=17 a2=15 a9=1,指针变量的比较运算经常用于数组,判定两个指针变量所指向的数组元素的位置先后。,8.2.4 指针变量的运算,4. 两个指针变量相减:当两个指针变量指向同一数组中的不同数组元素时,指针变量相减的差值即为两个指针变量相隔的元素个数。 例 相减指针变量逆序数组元素 #include void main( ) int a1

9、0=1, 3, 5, 7, 9, 11, 13, 15, 17, 19; int *p1= ,程序运行结果: a0=19 a1=17 a2=15 a9=1,8.2.5 指针变量作为函数参数,特点: 将变量地址作为实参传送到被调用函数中; 遵循“单向值传递”方式(特殊的地址值); 被调用函数不能改变实参指针的值,但可以改变实参指针所指向变量的值; 可以得到多个返回值。,8.2.5 指针变量作为函数参数,例 交换实参指针所指向变量的值 #include void swap(int *x, int *y) /*形参为相同类型的指针变量*/ int t; t=*x; *x=*y; *y=t; /*交换

10、指针变量所指向变量的值*/ void main() int a=10, b=20; printf(“1) a=%d, b=%dn“, a, b); swap( ,程序运行结果: a=10, b=20 a=20, b=10,地址值传递,8.2.5 指针变量作为函数参数,例 交换形参指针变量的值 #include void swap(int *x, int *y) /*形参为相同类型的指针变量*/ int *t; t=x; x=y; y=t; /*交换指针变量的值*/ void main( ) int a=10, b=20, *p= ,程序运行结果: a=10, b=20 a=10, b=20,地址值传递,The End,上机实验内容: 熟悉指针和指针变量的基本概念及运算 实验教程第八章 指针 实验一(2),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1