计算机语言与程序设计第九讲指针.ppt

上传人:sccc 文档编号:5388025 上传时间:2023-07-02 格式:PPT 页数:32 大小:183.51KB
返回 下载 相关 举报
计算机语言与程序设计第九讲指针.ppt_第1页
第1页 / 共32页
计算机语言与程序设计第九讲指针.ppt_第2页
第2页 / 共32页
计算机语言与程序设计第九讲指针.ppt_第3页
第3页 / 共32页
计算机语言与程序设计第九讲指针.ppt_第4页
第4页 / 共32页
计算机语言与程序设计第九讲指针.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《计算机语言与程序设计第九讲指针.ppt》由会员分享,可在线阅读,更多相关《计算机语言与程序设计第九讲指针.ppt(32页珍藏版)》请在三一办公上搜索。

1、1,第九讲 指 针,2,指针是C语言中的一个重要概念。掌握指针的用法,可使程序简洁、高效、灵活,但并不难学。为了了解什么是指针,先看一个小故事地下工作者阿金接到上级指令,要去寻找打开密电码的密钥,这是一个整数。几经周折,才探知如下线索,密钥藏在一栋三年前就被贴上封条的小楼中。一个风雨交加的夜晚,阿金潜入了小楼,房间很多,不知该进哪一间,正在一筹莫展之际,忽然走廊上的电话铃声响起。艺高人胆大,阿金毫不迟疑,抓起听筒,只听一个陌生人说:“去打开211房间,那里有线索”。阿金疾步上楼,打开211房间,用电筒一照,只见桌上赫然6个大字:地址1000。阿金眼睛一亮,迅速找到1000房间,取出重要数据66

2、,完成了任务。,3,我们画出下图,211,1000,P,说明:1、数据藏在一个内存地址单元中,地址是1000。2、地址1000又由P单元所指认,P单元的地址为211。3、66的直接地址是1000;66的间接地址是211;211中存的是直接地址1000。4、称P为指针变量,1000是指针变量的值,实际上是有用数据藏在存储器中的地址。,4,指针变量用来存放另一变量地址的变量变量的指针就是变量的地址。1、指针的概念指针是一种特殊的变量,特殊性表现在类型和值上。从变量讲,指针也具有变量的三个要素:(1)变量名,这与一般变量取名相同,由英文字符开始。(2)指针变量的类型,是指针所指向的变量的类型,而不是

3、自身的类型。(3)指针的值是某个变量的内存地址。,5,从上面的概念可知,指针本身类型是int型,因为任何内存地址都是整型的。但是指针变量的类型却定义成它所指向的变量的类型。2、指针的定义(说明,先说明后引用)例如:int*p,*q;/定义p,q为指向整数类型变量的指针float*point;/定义point为指向float型变量的指针double*pd;/定义pd为指向double型变量的指针int(*pa)10;/定义pa为指向int型数组的指针int(*pu)();/定义pu为指向int型函数的指针int*qq;/定义qq为指向int型指针的指针还有指向结构、联合的指针,后面再介绍,6,3

4、、指针赋值例int akey;/定义一个整型变量akeyint*p,*q;/定义p,q为指向整型变量的指针变量akey=66;/将66赋给akeyp=/将p的值赋给q,见图2,7,q=p;/将p的值赋给q,见图2,8,/指针1.c#include/预编译命令void main()/主函数/函数体开始 int a5=0,1,2,3,4;/定义数组,赋初值 int*p1,*p2;/定义指针变量 p1=/输出a1和a2的值/函数体结束,9,说明:见图,&a1,&a2,&p1,&p2,p1,p2,p1和p2分别指向a1,a2,这里&取地址运算符*指针运算符(间接访问运算符)*p1间接访问p1所指向的内

5、存单元,当然是输出a1的值*p2间接访问p2所指向的内存单元,当然是输出a2的值,10,/指针2.c#include/预编译命令void main()/主函数/函数体开始 int akey,b;/定义整型变量 int*p,*q;/定义指针变量 akey=66;/赋值给变量akey p=/输出b的值/函数体结束,4、向指针所指向的内存单元赋值,11,12,/指针3.c#include/预编译命令void main()/主函数/函数体开始int a5=1,3,5,7,9;/定义数组,赋初值int*p;/定义指针变量int i;/定义整型变量p=a;/赋值给指针变量,让p指向a数组for(i=0;i

6、5;i=i+1)/循环体开始 printf(a%d=%dn,i,*p);/输出a数组元素的值 p=p+1;/指针变量加1/循环体结束/函数体结束,5、指针与数组先看一个程序,13,说明(1)p=a;这里数组名作为数组的起始地址,即a0的地址。因此 p=a 等效于 p=,p,p+1,p+2,p,p+1,p+2,等效,14,/指针4.c#include/预编译命令void main()/主函数/函数体开始 int a5=1,3,5,7,9;/定义数组,赋初值 int*p;/定义指针变量 int i=0;/定义整型变量,赋初值 for(p=a;pa+5;p=p+1)/赋值给指针变量,让p指向a数组/

7、循环体开始 printf(a%d=%dn,i,*p);/输出a数组元素的值 i=i+1;/让i加1/循环体结束/函数体结束,做下面的实验,15,/指针5.c#include void main()char*p;/定义指向字符类型的指针变量pstatic char s=“abcdefgh”;/定义字符数组,并赋值p=s;/数组名是一个常量指针,/它指向该数组首地址while(*p!=0)/当p所指向的数组元素不为0时p=p+1;/让指针加1printf(“字串长度为%dn”,p-s);/输出字串长,数组名是一个常量指针,指向该数组的首地址,例,16,s,s,p,图中数组的首地址是s0的地址,即&

8、s0。s可看作是指向s0的指针。s是不会动的,是常量指针。,17,/指针6.c#include/预编译命令void main()/主函数/函数体开始static char shuzi=“987654321”;/定义数组,/赋初值为数字字符串char*p=/换行,数组名是一个常量指针,指向该数组的首地址,例,18,shuzi,p,说明:1、字符串:数字字符串。2、p指向shuzi8,即指向串中的字符1。3、直到型循环,用putchar函数将shuzi8输出到屏幕;之后让p=p-1。4、在while中,当p=shuzi则继续执行循环体。一旦 pshuzi 则退出循环。这种做法使输出结果为12345

9、67895、在本例中数组名shuzi是一个常量指针,永远指向shuzi0的地址上。思考:如何通过p和shuzi求该数字字符串的长度,19,/指针7.c#include/预编译命令void main()/主函数/函数体开始int i;char*p;/定义指针变量,赋初值p=computer;/指针赋初值,指向字苻串printf(%sn,p);/输出字苻串for(i=0;i8;i=i+1)/循环体开始putchar(pi);/输出第i个字苻/循环体结束putchar(n);/换行while(*p)/循环体开始putchar(*p);/输出p所指向的字符 p=p+1;/指针变量值加1/循环体结束 p

10、utchar(n);/换行/函数体结束,20,上例中有三种不同的输出方式,请你自己分析一下,各有什么特点说明:1、对字符指针变量赋值的写法(1)char*p;(2)char*p=“computer”;p=“computer”;以上两种都行。可以整体赋值。2、对字符数组赋初值的写法(1)char as12=“department”;/可以。在定义时可以整体赋值char as=“department”;/可以。在定义时可以整体赋值(2)char as12;as=“department”;/不可以!不可以整体赋值as12=“department”;/不可以!不可以整体赋值,21,#include/预

11、编译命令void main()/主函数/函数体开始int i;char s=“China;/s 为字符数组char*t=s;/t为指向字符数组的指针变量/p为指针数组变量,p数组元素依次指向/字符串“China,“Canada,“Denmark,“Greecechar*p=“China,“Canada,“Denmark,“Greece“;/q为指针数组变量,q数组元素依次指向指针数组元素/p0,p2,p3,p1 char*q=p,p+2,p+3,p+1;,例题分析,22,/输出1.1:s 的地址 cout1.1:输出 s 的地址“,23,1.1:输出 s 的地址0 x0012FF781.2:输

12、出 s 的内容China1.3:输出 t 指向的内容China1.4:输出*t 表示的内容C1.5:输出*s 表示的内容C1.6:输出 t 所在的地址0 x0012FF74,结果,24,/输出2.1:P0 指向的字符串 cout2.1:输出 P0 指向的字符串“p0endl;/输出2.2:P1 指向的字符串cout2.2:输出 P1 指向的字符串“p1endl;/输出2.3:P2 指向的字符串cout2.3:输出 P2 指向的字符串“p2endl;/输出2.4:P3 指向的字符串cout2.4:输出 P3 指向的字符串“p3endl;,25,2.1:输出 P0 指向的字符串 China2.2:

13、输出 P1 指向的字符串 Canada2.3:输出 P2 指向的字符串 Denmark2.4:输出 P3 指向的字符串 Greece,结果,26,/输出3.1:p0本身的地址 cout“3.1:输出p0本身的地址“,27,3.1:输出p0本身的地址0 x0012FF643.2:输出p1本身的地址0 x0012FF683.3:输出p2本身的地址0 x0012FF6C3.4:输出p3本身的地址0 x0012FF70,结果,28,/输出4.1:q0指向的内容cout 4.1:输出q0指向的内容 q0 endl;/输出4.2:q1指向的内容cout 4.2:输出q1指向的内容 q1 endl;/输出4

14、.3:q2指向的内容cout 4.3:输出q2指向的内容 q2 endl;/输出4.4:q3指向的内容cout 4.4:输出q3指向的内容 q3 endl;,29,4.1:输出q0指向的内容0 x0012FF644.2:输出q1指向的内容0 x0012FF6C4.3:输出q2指向的内容0 x0012FF704.4:输出q3指向的内容0 x0012FF68,结果,30,/输出5.1:q0指向的内容的内容cout 5.1:输出q0指向的内容的内容*q0 endl;/输出5.2:q1指向的内容的内容cout 5.2:输出q1指向的内容的内容*q1 endl;/输出5.3:q2指向的内容的内容cout 5.3:输出q2指向的内容的内容*q2 endl;/输出5.4:q3指向的内容的内容cout 5.4:输出q3指向的内容的内容*q3 endl;,31,5.1:输出q0指向的内容的内容China5.2:输出q1指向的内容的内容Denmark5.3:输出q2指向的内容的内容Greece5.4:输出q3指向的内容的内容Canada,结果,32,结 束,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号