[理学]第8章 指针

上传人:油条 文档编号:49791581 上传时间:2018-08-02 格式:PPT 页数:71 大小:3.99MB
返回 下载 相关 举报
[理学]第8章 指针_第1页
第1页 / 共71页
[理学]第8章 指针_第2页
第2页 / 共71页
[理学]第8章 指针_第3页
第3页 / 共71页
[理学]第8章 指针_第4页
第4页 / 共71页
[理学]第8章 指针_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《[理学]第8章 指针》由会员分享,可在线阅读,更多相关《[理学]第8章 指针(71页珍藏版)》请在金锄头文库上搜索。

1、第八章第八章 指针指针C C 程序设计中使用指针可以程序设计中使用指针可以: :有效地表示复杂的数据结构有效地表示复杂的数据结构链表等链表等动态分配内存动态分配内存调用函数时,可以得到调用函数时,可以得到多于一个多于一个的值的值-3-学习目标学习目标i; float k; float k;内存中每个字节有一个编号内存中每个字节有一个编号地址地址. . .2000200020042004内存内存0 0i ik k编译或函数调用时为其分配内存单元编译或函数调用时为其分配内存单元编译时形成的变量表编译时形成的变量表 变量名变量名地址地址变量类型变量类型 i i20002000intint型型k k2

2、0042004floatfloat型型-5-intint a,b,c; a,b,c;a=1;a=1;b=2; b=2; c=a+b; c=a+b; 直接访问直接访问程序片段 2000200020022002 20042004 20062006 20082008a ab bc c1直接将整数直接将整数1 1 存入变量存入变量 a a 2 直接将整数直接将整数2 2 存入变量存入变量 b b3直接将变量直接将变量 a a、b b的值取的值取 出,相加后存入变量出,相加后存入变量c c 利用变量名,直接存利用变量名,直接存取变量值的方式取变量值的方式称为称为“ “直接访问直接访问” ”。变量的直接访

3、问与间接访问变量的直接访问与间接访问-6-C 语言提供对内存单元的“间接访问”p_c20002000 20022002 20042004 20062006 20082008 20102010 20122012a ab bc c1 22008p_cp_c 20082008c37 直接访问是用简单变量来访问内存单元的直接访问是用简单变量来访问内存单元的 地址地址 间接访问是通过存放简单变量地址(指针间接访问是通过存放简单变量地址(指针 )的变量去访问内存单元的地址)的变量去访问内存单元的地址结结 论论8为什么引入指针的概念 指针的主要应用:指针的主要应用:指针作形参可以在指针作形参可以在子函数中修

4、改实参变量子函数中修改实参变量的的 值值利用指针作形参可以使子利用指针作形参可以使子函数有多于一个的函数有多于一个的 返回值返回值利用指针可以实现利用指针可以实现动态分配内存动态分配内存利用指针可以实现利用指针可以实现动态数据结构动态数据结构(链表、队(链表、队 列、堆栈、树等)的操作列、堆栈、树等)的操作指针可以指针可以改善某些函数的效率改善某些函数的效率-9-指针与指针变量指针与指针变量. . .20082008201220122014201420132013整型变量整型变量c c 1010变量变量p_c p_c 2009200920102010201120112008 2008 指针变量

5、变量的变量的内容内容变量的变量的地址地址指针:一个变量的地址指针:一个变量的地址 指针变量:专门存放指针的变量叫指针变量指针变量:专门存放指针的变量叫指针变量 指针指针-10-main() int a,*p;a=10;p=printf(“a:%dn“, a);printf(“p:%xn“, p); 运行结果:运行结果: a:10a:10 p:p:ffccffcc. . .ffccffccffd0ffd0ffd2ffd2ffd1ffd1整型变量整型变量a a1010指针变量指针变量p pffcdffcd ffceffce ffcfffcfffccffcc例例 指针的概念 指针的概念一、指针变量的

6、定义 定义形式:类型说明符 *标识符指针变量的说明和指针运算符指针变量的说明和指针运算符指针指向的变量的指针指向的变量的 数据类型数据类型int *pt_1 ; char *pt_2 ; float *pt_3 ; 说明 “*”,表示该变量为指针变量 类型标识符定义了该指针所指向变量的类型。 一个指针变量只能指向同一个类型的变量。表示指针变量表示指针变量二、指针运算符 两个有关的运算符(1) 例:int a, *pt; pt= -13-已知已知 int int i= 0i= 0,j=1j=1,* * p p,* * q q ;p = q = q = p1 = 把指针变量的值直接赋给指针变量p2

7、 = p1 ; 使p1、p2均指向变量i 给指针变量赋NULL值 p1=NULL; 或 p1=0; 不能把一个整数p,也不能把p的值整型变量 如如 int int i, *p;i, *p;p=1000; p=1000; i=p; i=p; -15-指针变量的初始化指针变量的初始化 一般形式一般形式数据类型数据类型 * * 指针名指针名= =初始地址值初始地址值;例例 int int i; i;intint *p= *p= ;变量必须变量必须已说明过已说明过 类型类型应一致应一致例例 int int i; i;intint *p= *p= ;intint *q= *q=p p; ;用已初始化指针

8、变量作初值用已初始化指针变量作初值例例 intint *p= *p=int int i; i;int int i; i; float *p=float *p= 指针变量必须先赋值指针变量必须先赋值, ,再使用再使用 -16-例1:读程序,写结果。main( ) int x , *px;px= i=10;intint *p; *p;*p=0;*p=0;printfprintf( (“ “%d%d” ”,*p);,*p); 例例 main( )main( ) intint i=10; i=10;intint *p; *p;p= p=*p=0; *p=0;printfprintf( (“ “%d%d

9、” ”,*p);,*p); 指针变量必须先赋值,再使用. . .20002000200420042006200620052005整型变量整型变量i i1010 指针变量指针变量p p200120012002200220032003随机随机危险!危险!*p*p-19-main() int *p1,*p2, a, b, t;scanf(“%d%d“, p1= p2=if(*p1*p) p=if(c*p) p=printf(“max=%d“,*p); 数组元素是内存的一个单元,故 指向数组元素的指针变量的性质 和指向变量的指针变量是一样的 。 a0a1a2a3 a9p执行语句:p=指针与一维数组一、

10、指向数组元素的指针变量1 1int a10; int * p = p = *p=1;*p=a;-23-例例: : int int a10, *p;a10, *p;p= p=则则p+1 p+1 指向指向? ?则则p+5 p+5 指向指向? ?则则p+9 p+9 指向指向? ?*(p+5)=12; *(p+5)=12;p pp+1p+1a0 a1 a2 a3 a4 a5 a6 a7 a8 a9a数组二、指针的算术运算二、指针的算术运算当p指向数组中的元 素时, 算术运算才有意义v pi , p - i ( ( i i为整型数为整型数 ) )v P为指针变量,已经指向了某个数组元素。p+5p+5p+

11、9p+9-24-例例: : int int a10, *p;a10, *p;则则a+1 a+1 指向指向? ?则则a+5 a+5 指向指向? ?则则a+9 a+9 指向指向? ?*(a+9)=100; *(a+9)=100;a aa+1a+1a0 a1 a2 a3 a4 a5 a6 a7 a8 a9a数组二、指针的算术运算二、指针的算术运算vv p pi i , p - i, p - i (i (i为整型数为整型数) )v P为指针变量,已经指向了某个数组元素a+5a+5a+9a+9-25-p p指针与数组 二、指针的算术运算二、指针的算术运算p p例例 int int a10;a10;int

12、 int *p=*p=a a ; ;p+; p+; *p=1; *p=1;p+; p+;p+=5; p+=5;p-; p-;vv p+, p-, p+=i, p-=i p+, p-, p+=i, p-=iv P为指针变量,已经指向了某个数组元素a0 a1 a2 a3 a4 a5 a6 a7 a8 a9a数组1 1p pp pp p-26-二、指针的算术运算二、指针的算术运算vv p1+p2 p1+p2无意义无意义p1p1例例 int int a10;a10;int int *p1=*p1=int int *p2=*p2=则:则:p2-p1=3;p2-p1=3;p2p2vv 若若p1p1与与p2

13、p2指向同一数组,指向同一数组,p1-p2=p1-p2=两指针间元素个数两指针间元素个数a0 a1 a2 a3 a4 a5 a6 a7 a8 a9a数组main( ) int a=1, 2, 3, 4, 5, 6 ;int * p;p = a;printf(“ % d”, * p);printf(“ % dn”, *(+ +p );printf(“ % d”, * + +p);printf(“ % dn”, *(p- -);p + = 3;printf(“ %d %dn”, * p, *( a + 3 ); a0 a1 a2 a3 a4 a5p12 3 4 5 612 33 54前置运算和后置

14、运算-28-指针与数组 三、指针的关系运算三、指针的关系运算若若p1p1和和p2p2指向同一数组,则指向同一数组,则l lp1p2 p1p2 表示表示p1p1指的元素在后指的元素在后l lp1=p2 p1=p2 表示表示p1p1与与p2p2指向同一元素指向同一元素当p1、p2指向同一数组 中的元素时,关系运算 才有意义a0 a1 a2 a3 a4 a5 a6 a7 a8 a9a数组p1p1p2p2p2p2p1p1p1p1p2p2指针可以和零之间进行等于或不等于的关系运算, 即p=0或p!=0。 用于判别指针p是否为一个空指针。-29-vv 下标方式下标方式 a3=1;a3=1;vv 指针方式指针方式 p=p=*p=1 *p=1;四、引用数组元素的方式四、数组元素的表示方法四、数组元素的表示方法p+1a0a9p a1 a2 a3. ai.1 2 3 4 5 6 7 8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号