ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:23.70KB ,
资源ID:25606527      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25606527.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(对C语言指针的认识的认知实习报告.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

对C语言指针的认识的认知实习报告.docx

1、对C语言指针的认识的认知实习报告认知实习报告题目:对C语言指针的认识 学生姓名: 学号: 班级: 所属学院: 指导教师:2013年7月对C语言指针的认识 学生姓名: 学号: 班级: 指导教师: 完成日期:1 绪论.1 1.1 实习背景及目的.11.2 实习研究方法.12 实习要求.23 实习地点.24 实习内容.24.1 指针、地址及指针变量.24.2 指针与数组.4 4.2.1 指针与数组的关系.4 4.2.2 指针与数组元素.5 4.2.3 通过指针引用数组.8 4.2.4 指针数组与多重指针.104.3 指针与函数.12 4.3.1 指向函数的指针.12 4.3.2 用函数指针变量调用函

2、数.13 4.3.3 用指向函数的指针作函数参数.13 4.3.4 函数返回指针.144.4 指针与字符串.155 实习感想.176 参考文献.177 附录.181 绪论1.1 实习背景及目的认识实习是教学计划重要部分,它是培养学生的实践等解决实际问题的第二课堂,它是专业知识培养的摇篮,也是对生产流水线的直接认识与认知。实习中应该深入实际,认真观察,获取直接经验知识,巩固所学基本理论,保质保量的完成指导老师所布置任务。学习技术人员的勤劳刻苦的优秀品质和敬业奉献的良好作风,培养我们的实践能力和创新能力,开拓我们的视野,培养生产实际中研究、观察、分析、解决问题的能力。认识实习是我们大学生的一门必修

3、课,通过认知实习,我们要对信息科学与信计专业建立感性认识,并进一步了解本专业的学习实践环节。通过接触实际过程。一方面,达到对所学专业的性质、内容及其在技术领域中的地位有一定的认识,为了解和巩固专业思想创造条件,在实践中了解专业、熟悉专业、热爱专业。另一方面,巩固和加深理解在课堂所学的理论知识,让自己的理论知识更加扎实,专业技能更加过硬,更加善于理论联系实际。再有,通过使用计算机进行编程处理,为进一步学习技术基础和专业课程奠定基础。另外,指针是C语言中广泛使用的一种数据类型,运用指针编程是C语言最主要的风格之一,利用指针变量可以很方便地使用数组与字符串并能直接查询到计算机的内存地址,同时使用指针

4、也可以构造各种数据结构、网络消息等。能否正确理解和使用指针,是关乎是否掌握C语言的一个重要标志。1.2实习研究方法运用计算机进行操作2 实习要求1、不得迟到、早退、旷实习等,如因特殊原因不能按时到达或不能去实习应向班长或带队老师请假;2、实习期间仔细观察,认真听老师或师傅的讲解,遇到不懂得地方可以提出来,随时做笔记;3、 实习期间要严肃认真,禁止喧哗打闹。3 实习地点1、数计学院实验中心4 实习内容4.1指针、地址及指针变量1、指针:能够标识内存单元的地址2、简单的讲:指针就像桌面的快捷方式一样。C语言中通常使用指针变量来实现指针的应用。13、指针变量:专门用来存放另一变量的地址的变量,指针变

5、量就是地址变量用来存放地址,指针变量的值是地址。4、指针是一个地址,指针变量是存放地址的变量。5、指针的引用:如何对指针变量赋值以及如何使用指针变量。就是要让该指针指向某内存单元,可以通过符号&来获取某个变量的地址。指针引用有三种情况:(1)给指针变量赋值(2)引用指针变量指向的变量(3)引用指针变量的值例:输入a、b两数,按先大后小顺序输出#includeInt main() Int *p1,*p2,*p,a,b; printf(“please enter two integer numbers :”); scanf(“%d,%d,&a,&b”); p1=a; p2=b; if(ab) p=

6、p1;p1=p2;p2=p; printf(“a=%d,b=%dn”,a,b); printf(“max=%d,min=%dn”,*p1,*p2); return 0;运行结果:please enter two integer number :5,9a=5,b=9max=9,min=56、指针与地址:地址是对计算机内存进行的连续编号,指针是地址的操作者与使用者。地址是一个表征计算机系统内存单元的常量,指针是可以等于任何地址值的变量。7、void指针:空指针(NULL)是不指向任何有效地址的指针8、指针变量的定义:类型名 *指针变量名 如: int *pointer_1, *pointer_2;

7、4.2指针与数组4.2.1指针与数组的关系1、指针变量用于存储某内存单元的地址,而数组名也代表某内存变量的地址。数组名不代表整个数组,只代表数组首元素的地址。当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。2、例:#include main() int *a=NULL; int b5=0,1,2,3,4; a=b; printf(“a=%x,b=%xn”,a,b);结果:a=12ff68,b=12ff68结果表明:b的值为内存地址 0x0012ff68C语言中数组名是作为地址常量来处理的,其值为该数组的首地址4.2.2 指针与数组元素1、数组元素的指针就是数组元素的地址 可以用一个

8、指针变量指向一个数组元素,如:int a10=1,3,5,7,9,11,13,15,17,19;int *p;p=&a0;其中p=&a0;与p=a;等价(因数组名代表数组中首元素的地址)2、引用数组元素可以用下标法(如a3),也可以用指针法,即通过指向数组元素的指针找到所需的元素3、在指针指向数组元素时,可以对指针进行一下运算:加一个整数(用+或+=),如p+1;减一个整数(用或=),如p1;自加运算,如p+,+p;自减运算,如p,p;两个指针相减,如p1p2(只有p1与p2指向同一数组中的元素时才有意义)说明:(1)若指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素,p1

9、指向同一数组中的上一个元素。(2)如果p的初值为&a0,则p+i和a+i就是数组元素ai的地址(3)*(p+i)或*(a+i)是p+i或a+i所指向的数组元素,即ai(4)如果指针变量p1与p2都指向同一数组,如执行p2p1,结果是p2p1的值除以数组元素的长度。4、引用一个数组元素的方法:(1)下标法,如ai形式(2)指针法,如*(a+i)或*(p+i)其中a是数组名,p是指向数组元素的指针变量,其初值p=a例1:int a 10,*p, p=&a9; p是一个指向数组元素的指针,它指向一维数组a的第9个元素a9例2:一个整型数组a,有10个元素,要求输出数组中的全部元素(用指针法)#inc

10、lude int main() int a10; int *p,i; printf(“please enter 10 integer numbers:”); for(i=0;i10;i+) scanf(“%d”,&ai); for (p=a;p(a+10);p+) printf(“%d”,*p); printf(“n”); return 0;运行结果:please enter 10 integer numbers:0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9例 3:一个指向二维数组元素的指针的例子。分析下列程序输出结果。#includemain()int m23

11、=(1,3,5),7, 9,11; main ( ) int *p; for(p-m0; pm0+6;p+) if (p一m0)%3=0) printf (n ); printf (%4d,*p); printf (n); 执行该程序输出结果如下: 1 3 5 7 9 11 说明:该程序中定义了一个指针P,它指向数组m的首元素,因为m0表示该数组第。行首列元素的地址,与&00等价。因此,P是一个指向二维数组m的首元素的指针。 请将P指针向数组m的尾元素,输出如下结果: 11 9 7 5 3 14.2.3 通过指针引用数组1、引用一维数组一维数组是一个线形表,它被存放在一片连续的内存单元中。C语

12、言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。实际上编译系统将数组元素的形式ai转换成*(ai),然后才进行运算。对于一般数组元素的形式:,编译程序将其转换成:*(),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*=。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指

13、针。例1: int (*pa)5; pa是一个指向一维数组的指针,它所指向的一维数组是由5个int型元素组成的。如果该指针加1,则将指向下面的5个元素,*pa指针的增值是以5个元素的一维数组长度为单位的。实际上,指向一维数组的指针,是指向二维数组的某一列的首元素地址。例如: int(*pa)5; int a35; pa=a+1; 这表明pa是一个指向一维数组的指针,它指向二维数组a的第一行首列元素的地址。pa加1将指向第二行首列元素的地址,pa-1将指向第0行首列元素地址。2、 引用多维数组*(ai+j)等价于*(*(a+i)+j)等价于aij2务必记住*(a+i)等价于ai表示形式含义a二维

14、数组名,指向一维数组a0a0,*(a+o),*a0行0列元素地址a+1,&a11行首地址a1,*(a+1)1行0列元素a10的地址a1+2,*(a+1)+2,&a121行2列元素a12的地址*(a1+2),*(*(a+1)+2),a121行2列元素a12的值 例1:一个指向二维数组指针的例子。分析该程序的输出结果,说明指向一维数组的指针是怎祥赋值和使用的。#includemain() int a35=1,2,3,4,5,6,7,8,9,10,ll,12,13,14,15; int(*p)5; p=a+1; printf(%d,%d,%dn,p00,*(*(p+1)+1),*(p-1+3); 执

15、行该程序输出结果如下: 6, 12说明;程序中p是一个指向一维数组的指针,它所指向的一维数组有5个int型元素。即p要指向一个包含有5个元素的一维数组。p的值是该一维数组的首元素地址。用a十1或&a1值赋给p,则使p指向a数组的第一行首列地值。不能用某行某列的地值给p赋值,p00等价于*p,即a10元素的值。*(*(p+1)+1)等价于p11等价于*(*(a+2)+1),即a21元素的值。而*(p-1+3)等价于*(*(p-1)+3)等价于*(*(a+0)+3),即a03元素的值。因此,输出上述结果。实际上,指向一维数组的指针是一个二级指针,它所指向的是一个二维数组,给指向一维数组的指针所赋的

16、值是二维数组的某行的行地址。二维数组a35的行地址表示为a十i,i为0,1,2.一个指向一维数组的指针(* p)5可以用a+i(i=0,1,2)来进行赋值。4.2.4 指针数组与多重指针指针数组是指数组元素为指针类型数据的数组。数组元素可以为int型,float型和double型,称为数值数组;数组元素为char型的称为字符数组;数组元素为指针的称为指针数组,最常用的是一维一级指针数组,即该数组是一维的,它的每个元素是一个一级指针,或是一维数组,因此一维一级指针数组实际上是一个二维数组。此外,还有一维二级指针数组和二维一级指针数组,它们实际上是一个三维数组。其他的指针数组使用甚少。指针数组在定

17、义形式上与指向数组的指针很相似,使用中应注意区别。指针数组定义格式如下: 类型说明符 *数组名数组长度;这是一维一级指针数组的定义格式。而指向一维数组的指针定义格式如下: 类型说明符(*数组名)数组长度;比较可知,二者只差一个圆括号,这个圆括号的作用是改变了优先级。没有圆括号的是数组名与结合,则是数组。有了圆括号的是*与数组名结合,则是指针,后面的说明是指向一维数组的指针,例如:int *p5;int(*g)5; 其中,p是一维一级指针数组名,g是指向一维数组的指针名。 一维二级指针数组和二维一级指针数组表示如下:int *al5;*a235;其中,al是一维二级指针数组名,a2是二维一级指针

18、数组名。指针数组的赋初值和赋值办法与数组一样,只是所赋予的值是地址值。例1:一个指针数组的例子。分析下列程序的输出结果,说明指针数组的赋值方法。 int a6=1,2,3, 4,5. 6. main() int *p3; for(i=0 i3,i+) pi=&ai*2; prinif(%d,dn,p11,*(p2+1); 执行该程序输出如下结果: 4,6说明:该程序中p是一个一维一级指针数组名,它有3个元素,即每个元常是指向int型的指针。通过for循环给p赋值,分别使p0值为&a0,p1值为&a2,p2值为&a4.指针数组比较适合于对若干字符串的处理。字符串本身是一个一维字符数组,如将若干个

19、字符串放到一个二维字符数组中,则每一行的元素个数要求相同,实际上各字符串长度不等,只好按字符串中最长的作为每行的元素个数。这样将会造成内存空间的浪费。如果采用指针数组便可克服存储空间的浪费问题。因为指针数组中各个指针元素可以指向不同长度的字符串。因此,实际编程中常用字符型的指针数组存放字符串。4.3指针与函数4.3.1 指向函数的指针1、定义:在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址称为这个函数的指针例:int (*p)(int,int);定义p是一个指向函数的指针变量,它可以指向函数的类型为整型且有两个整型参数的函数。p的类型用int (*

20、)(int,int)表示。4.3.2 用函数指针变量调用函数1、调用函数的方法:(1)通过函数名调用函数(2)通过指针变量调用函数2、定义和使用指向函数的指针变量(1)定义形式: 类型名(*指针变量名)(函数参数表列)注意:1)定义指向函数的指针变量,不意味着这个指针变量可以指向任何函数,它只能指向在定义是指定的类型的函数。如“int (*p)(int,int);”表示指针变量p只能指向函数返回值为整型且有两个整型参数的函数。2)要用指针调用函数,必须先使指针变量指向该函数。3)在给函数指针变量赋值时,只需给出函数名而不必给出参数。4)用函数指针变量调用函数时只须将(*p)代替函数名即可,在(

21、*p)之后的括号中根据需要写上实参。5)对指向函数的指针变量不能进行算术运算。6)用函数名调用函数,只能调用所指定的一个函数而通过指针变量调用函数比较灵活,可以根据不同情况先后调用不同的函数。4.3.3 用指向函数的指针作函数参数1、指向函数的指针变量的一个重要用途就是把函数的地址作为参数传递到其他函数。2、指针作函数参数主要分为两种类型:一、函数形参 二、函数实参3、指针作函数形参定义: 类型名 函数名(类型名1 *指针名1,类型名2 *指针名2,.)4.3.4 函数返回指针1、定义返回指针值的函数的一般形式: 类型名 *函数名(参数表列)例:float *search(float (*po

22、inter)4,int n)2、例:主函数中输入数字的星期数,调用子函数char*week_day(int index)输出英语的星期名称,编写指针函数实现。#include#define N 20Static char date8N=“Sunday”,”Monday”,”Wednesday”,”Thursday”,”Friday” ,”Saturday”,”Illegal input index” ;char *week_day(int index) return (0=index & index =7)?Dateindex:data7;main()int index=0;printf(“请

23、输入日期数:n”);scanf(“%d”,&index);printf(“输入值 =%dn”,index);printf(“日期名称为:%sn”,week_day(index);运行 输入 4 结果: 输入值=4 日期名称为:Thursday4.4指针与字符串1、字符串的引用方式有两种:(1)通过数组名和下标引用字符串一个字符(2)通过数组名和格式声明“%s”输出该字符串2、字符指针作函数参数作函数参数有三种方法:(1)用字符数组名作为函数参数(2)用字符型指针变量作实参(3)用字符指针变量作形参与实参例:用函数调用实现字符串的复制#includeint main() void copy_st

24、ring(char *from,char *to); char *a=”I am a teacher.”; char b=”You are a student.”; char *p=b; printf(“string a=%sn string b=%sn”,a,b); printf(“n copy string a to string b:n”); copy_string(a,p); printf(“string a=%sn string b=%sn”,a,b); return 0;void copy_string(char *from,char *to); for(;*from!=0;fro

25、m +,to+) *to=*from; *to=0;运行结果:string a=I am a teacher. string b=You are a student. copy string a to string b: string a=I am a teacher. string b=I am a teacher.3、字符指针变量与字符数组(1)字符数组由若干个元素组成,每一个元素中放一个字符,而字符指针变量中存放的是地址。(2)可以对字符指针变量赋值,但不能对数组名赋值。(3)数组可以在定义时对个元素赋值,但不能用赋值语句对字符数组中全部元素整体赋值。(4)编译时为字符数组分配若干存储单

26、元,以存放各元素的值,而对字符指针变量,只分配一个存储单元。(5)指针变量的值是可以改变的而数组名代表一个固定的值,不能改变。(6)字符数组中个元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容是不可以被取代的。(7)若指针变量没有指向数组,则不能用下标法与指针法引用数组元素;若字符指针变量p指向字符串常量就可以用下标法与指针法引用所指的字符串中的字符。(8)用指针变量指向一个格式字符串,可以用它来代替printf函数中的格式字符串。但使用字符数组时,只能用在定义数组时初始化或逐个对元素赋值的方法,而不能用赋值语句对数组整体赋值。5 实习感想五天的认知实习很快就结束了,我觉得这种形式的认知实习非常的有意思,因为这比坐在课堂里听讲来得更为实际、直观。通过实际操作,我了解了C语言中指针变量问题,对指针的应用、指针与数组的结合和怎样运用指针处理问题都有了一定认识,并对VC+6.0该软件有了更深的

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1