付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机科学与技术系C 语言实验报告实验名称:指针及其应用专业:日期:班次:得分:姓名:指导老师:学号:实验目的( 1) 掌握变量的指针及其基本用法。( 2) 掌握一维数组的指针及其基本用法。( 3) 掌握指针变量作为函数的参数时,参数的传递过程及其用法。一实验内容( 1) 运行以下程序,并从中了解变量的指针和指针变量的概念。( 2) 运行以下程序,观察 &a0 、 &ai 和 p 的变化,然后回答以下问题:1. 程序的功能是什么2. 在开始进入循环体之前, p 指向谁3. 循环每增加一次, p 的值(地址)增加多少它指向谁4. 退出循环后, p 指向谁5. 你是否初步掌握了通过
2、指针变量引用数组元素的方法( 3) 先分析以下程序的运行结果, 然后上机验证, 并通过此例掌握通过指针变量引用数组元素的各种方法。( 4) 编写函数,将 n 个数按原来的顺序的逆序排列(要求用指针实现) ,然后编写主函数完成: 输入 10 个数; 调用此函数进行重排; 输出重排后的结果。二分析与讨论( 1) 指针的定义方法,指针和变量的关系。定义方法:数据类型 * 指针变量名 ;如定义一个指向 int型变量的指针int *p;则我们可以继续写如下代码int a = 4;p = &a;printf("%d", *p);在这里,我们定义了一个变量a,我们把它理解为内存空
3、间连续的4 个字节( int 型占用 4 字节),则这 4 个字节的空间保存着一个数 4。&是取地址符号,即把变量 a 的地址(即这 4 个字节的首地址)赋给指针 p(记住指针 p 的类型和变量 a 的类型要保持一致,否则的话,要进行类型转换)。这样子,指针 p 就保存着变量 a 的地址。我们如果把指针 p 当做内存空间里面另外一个连续的 4 个字节,那么这 4 个字节保存的数就是变量a 的地址。 printf("%d",*p)和printf("%d",a) 的结果是一样的。 这里的 * 是取变量符号 (与 &刚好作用相反, 通过变量的地
4、址找到变量),与定义时 int *p 的* 号作用不同(定义时的 * 表示该变量是个指针变量,而非是取它指向的变量)。( 2) 数组和指针的关系。指针与数组是 C 语言中很重要的两个概念, 它们之间有着密切的关系, 利用这种关系,可以增强处理数组的灵活性, 加快运行速度, 本文着重讨论指针与数组之间的联系及在编程中的应用。1指针与数组的关系当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如:char str20,ptr;ptr=str;ptr 被置为数组 str 的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。 此时可以认为指针 ptr 就是数组 str
5、(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问, 既可以用下标变量访问,也可以用指针访问。2指向数组元素的指针若有如下定义:int a10,pa;pa=a;则 p=&a0 是将数组第 1 个元素的地址赋给了指针变量p。实际上, C 语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得: p=&a0 或 p=a。这两种方法在形式上相像,其区别在于:pa 是指针变量, a 是数组名。值得注意的是: pa 是一个可以变化的指针变量,而a 是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a 是不能变化的,不允许使用a、 a 或语句
6、 a=10,而 pa、 pa、pa =10 则是正确的。由此可见,此时指针与数组融为一体。3指针与一维数组理解指针与一维数组的关系, 首先要了解在编译系统中, 一维数组的存储组织形式和对数组元素的访问方法。一维数组是一个线形表,它被存放在一片连续的内存单元中。 C 语言对数组的访问是通过数组名 (数组的起始地址) 加上相对于起始地址的相对量 (由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。实际上编译系统将数组元素的形式 ai 转换成 (a i) ,然后才进行运算。对于一般数组元素的形式: <数组名
7、>< 下标表达式 > ,编译程序将其转换成: (< 数组名 > <下标表达式 >) ,其中下标表达式为: 下标表达式扩大因子。 整个式子计算结果是一个内存地址, 最后的结果为: <地址 >=<地址所对应单元的地址的内容 >。由此可见, C语言对数组的处理,实际上是转换成指针地址的运算。数组与指针暗中结合在一起。 因此,任何能由下标完成的操作, 都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。4指针与多维数组用指针变量可以指向一维数组, 也可以指向多维数组。但在概念上和使用上,多维数组的指针比一维数组的指针要复杂
8、一些。例如,在一个三维数组中,引用元素cijk的地址计算最终将换成: ( ( (c i) j) k) 。了解了多维数组的存储形式和访问多维数组元素的内部转换公式后,再看当一个指针变量指向多维数组及其元素的情况。1 指向数组元素的指针变量若有如下说明:int a34;intp;p=a;p 是指向整型变量的指针;p=a 使 p 指向整型二维数组a 的首地址。( (p 1) 2) 表示取 a12 的内容; p 表示取 a01 的内容,因为 p 是指向整型变量的指针; p表示 p 的内容加 1,即 p 中存放的地址增加一个整型量的字节数 2,从而使 p 指向下一个整型量 a01 。2 指向由 j 个整数组成的一维数组的指针变量当指针变量 p 不是指向整型变量,而是指向一个包含j 个元素的一维数组。如果 p=a0 ,则 p不是指向 a01,而是指向 a1 。这时 p 的增值以一维数组的长度为单位。5指针与字符数组C 语言中许多字符串操作都是由指向字符数组的指针及指针的运算来实现的。因为对于字符串来说, 一般都是严格的顺序存取方式, 使用指针可以打破这种存取方式,更为灵活
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026培训机构面试题及答案
- 2026人防办 面试题目及答案
- 2026设计会计面试题及答案
- 自动退让协议书范本
- 后续治疗解协议书
- 雇工免责合同协议
- 拆迁无补偿协议书
- 2026世硕面试题目及答案
- 2026算法逻辑面试题目及答案
- 2026外卖包装污染面试题及答案
- 2026年人教版高一第二学期语文期末单元知识梳理试卷(附答案可下载)
- 《干细胞供者知情同意规范》
- 2026年高考全国乙卷文科综合真题试卷(含答案)
- 2026年交管学法减分道题题库试题含答案详解(能力提升)
- 牛蒡茶营销方案(3篇)
- 药品温湿度管理制度培训
- 12项CCUS国家标准2026年7月1日实施全链条标准体系解读
- 抖音营销团队考核制度
- 公租房培训教学课件
- GB/T 70.4-2025紧固件内六角螺钉第4部分:降低承载能力内六角平圆头凸缘螺钉
- 拍卖公司企业介绍
评论
0/150
提交评论