版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、?C?C语言程序设计上机指导语言程序设计上机指导? ?工程工程六指针及其应用六指针及其应用本章重点文本 指针的根本概念。 指针和指针变量。 数组和指针。 函数的指针。任务一 关于指针应用实验一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验描述 指针应用实验。实验目的 1掌握指针变量的定义、初始化以及通过指针变量对数据的访问。 2掌握指针、数组、地址之间的关系。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 3掌握用指针作为函数参数的方法。 4掌握动态内存分配一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析
2、任务实施实验6-1 指针变量定义、赋值、运算例如源程序6-1:#include void main(void) int a=3,*p;一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 p=&a; printf(“a=%d,*p=%dn,a,*p); *p=10; printf(“a=%d,*p=%dn,a,*p); printf(“Enter a:); scanf(“%d,&a);一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析printf(“a=%d,*p=%dn,a,*p); (*p)+; printf(“a=%d,*
3、p=%dn,a,*p); printf(“%d,%dn,*&a,&*p); 一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果原理提示: 我们在编辑源代码是要特别注意*p=&a,*p=a和p=&a他们三者的区别。*是解引用运算符,&是取地址运算符。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析*p=&a这样写是不正确的除非p是指向指针的指针,这时候*p前面要有类型符比方int等,通常的情况是这样用的int *p=&a;这一句作用相当于int *p; p=&a; 两句,
4、这句话的意思是定义一个int类型指针,然后用a的地址给p赋值;一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 对于指针p来说,*p就是指针p所指向的内存空间存储的值。 *p=a就是把p所指向的那一内存空间的值赋值为a,p本身不改变。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 p=&a就是用a的地址对p赋值,a是一个变量,&a就是存储这个变量的内存地址,指针存储的就是一个地址,*p就是这一地址中的内容。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果运行结果:思考: 假设本实验把第
5、四行语句“p=&a;,如果去掉,会产生什么结果呢?一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果: 大家可以知道:使用了未初始化的局部变量“p。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析任务实施思考: 假设第十一行语句“(*p)+;,如果去掉括号变成“*p+;会产生什么结果?一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果 一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析任务实施实验6-2 指针与一维数组例如源程序6-2:#include void m
6、ain( ) int n,*ptr;一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 int a5=1,2,3,4,5; ptr=a; for(n=0;n=4;n+) printf(“%4d,*ptr+);一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析printf(“%d,ptr); printf(“n); 一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典
7、型例题及解析实验结果注意要点: 大家需要注意,“printf(“%d,ptr);这一句输出的是指针ptr的地址,是各各数组元素的内存地址。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析任务实施实验6-3 指针与字符串例如源程序6-3#include main( ) char s100,*p=s;一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 int c4=0; gets(p); while(*p) if(*p=A&*p=a&*p=0&*p=9) c2+; 一、关于指针应用实验任务一 关于指针应用实验 二、实验考
8、核三、典型例题及解析else if(*p= ) c3+; p+; puts(s);printf(“%dt%dt%dt%dn,c0,c1,c2,c3); 一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析思考 1、第4行“gets(p);能否改成“scanf(“%s,p);? 2、第15行puts(s);能否改成: puts(p); printf(“%sn,p); printf(“%sn,s);一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果源程序的运行结果修改后的运行结果一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、
9、典型例题及解析实验结果注意: C中的puts函数只用来输出字符串,没有格式控制,它里面的参数就是存放字符串的字符数组的数组名就可以了,printf函数输出格式有很多,类型也不用说了,可以根据不同格式加些转义字符以到达一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析格式化的输出,比方换行,制表等等.puts(str)中str为一字符串那么自动在str的后面加一个换行符n,而printf(str)那么需要手动加上n。同理,gets接收字符串时,会将字符串后面的n去掉,而用scanf接收时,会在字符串后面加上n。所以,puts要和gets搭配,scanf和printf搭配
10、使用。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果 那么第15行puts(s);能否改成: puts(p); printf(“%sn,p); printf(“%sn,s); 我们通过运行结果图来比较下:一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验结果 观察运行结果图我们会发现得出的结果: 根本相同!一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验考核任务要求:分析改错。 1第24行fun(ss,n,ps)函数调用
11、时,参数ss为二维数组名,请分析第3行fun函数的形参,对第3行进行修改。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 2第14行定义了字符指针ps,却没有给ps赋值而直接使用了,分析这样会有什么影响,对14行进行修改。 3第18行循环条件为字符串的直接比较,分析字符串能直接比较吗,对18行进行修改。 一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析实验考核源程序6-5#include #include char *fun(char *a,int num,char *max) int i=0一、关于指针应用实验任务一 关于指针应用实验
12、 二、实验考核三、典型例题及解析 max=a0 for(i=0;inum;i+) /找出最长的一个字符串 if(strlen(max)strlen(ai) max=ai; return max; /传回最长字符串的地址 一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析void main( ) char ss1081,*ps; int i=0,n; printf(“输入假设干个字符串:); gets(ssi);一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析while(ssi!=#) /用#作为结束输入的标志 i+; gets(ssi);
13、一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 n=i; ps=fun(ss,n,ps); printf(“nmax=%sn,ps);一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析考核结果一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析考核结果一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析考核结果一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析典型例题例6-3 设有两条语句“int a,*p=&a;和“*p=a;,那么以下说法中正确的选项是(
14、 )。 两条语句中的“*p含义完全相同 两条语句中的“*p=&a和“*p=a功能完全相同一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 第1条语句中的“*p=&a是定义指针变量p并对其初始化 第2条语句中的“*p=a是将a的值赋予变量p 答案:一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析分析: 分析备选答案:第1条语句是数据定义语句,其中的“*p表示定义的变量p是指针型变量;第2条语句是赋值语句,其中的“*p代表它所指向的变量a,所以该备选答案是错误的,不符合题意。分析备选答案一、关于指针应用实验任务一 关于指针应用
15、实验 二、实验考核三、典型例题及解析 :第1条语句中的“*p=&a是将变量a的地址以初值方式赋予指针变量p;而第2条语句中的“*p=a是将变量a中的值赋予指针变量p指向的变量注意也是a,即该语句的作用和a=a完全相同,显然该备选答案是错误的,不符合题意。再分析备选答案一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析 :显然该答案是正确的,符合题意。至于备选答案 ,显然是错误的,“*p是代表指针变量p指向的变量,不能代表指针变量p。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析例6-17 编一个程序,从键盘上输入一串符号以回车换行符为结束,将其以字符串形式存入一维字符型数组,然后再输出该字符型数组中的字符串。此题要求用指向字符的指针来处理字符型数组中的字符。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析分析: 本程序的结构可以这样来设计,输入一个字符,如果是回车换行符,那么结束输入,否那么存入某字符型数组。反复进行直到输入的字符是回车换行符,这段程序是标准的当型循环结构。一、关于指针应用实验任务一 关于指针应用实验 二、实验考核三、典型例题及解析
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业现代化背景下农产品标准化生产管理系统开发
- 体育俱乐部会员权益保障协议
- 2025年茂名货车资格证考试题
- 企业内部管理咨询顾问合同
- 汽车行业自动驾驶技术研究方案
- 会计劳动合同
- 知识产权法作业指导书
- 企业质量管理体系建设作业指导书
- 人才猎头服务合作协议
- 提高用户购物体验的技术创新实践
- 自助画室创业计划书
- 2023年-2024年岗位安全教育培训试题及答案通用
- 口腔修复学(全套课件290p)课件
- 小学生心理问题的表现及应对措施【全国一等奖】
- 生产车间薪酬管理制度
- 小学生科普人工智能
- 2022年北京外国语大学博士生英语入学考试试题
- 提高做好群众工作的能力主讲陶通艾
- 初中学段劳动任务清单(七到九年级)
- 退耕还林监理规划
- 3500A 手持式综合测试仪操作指导培训
评论
0/150
提交评论