版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、程序设计技术,C语言数据描述和C程序设计初步 结构化程序设计基础和C语言的控制结构 数组及其应用 函数与C程序结构 指针与函数 指针与数组 字符串及其应用 结构体类型和联合体类型 C语言的文件处理及其应用 位运算与枚举类型,指针与数组,指针与数组的关系 指针数组与命令行参数 用指针构成动态数组,指针与数组的关系,多级指针的概念 在程序设计语言中,占用连续空间的数据对象都与其所占存储区域的起始地址相关。 占用连续空间的数据对象有的表示的是线性的概念、有的表示的是平面的概念或是多维空间的概念。在计算机存储系统中对应的都是线性的连续空间区域,现在的问题是如何用表明存储系统中线性连续区域的起始地址表示
2、的到底是几维空间的起始地址。 使用地址的不同级别来描述这些表示不同空间数据对象在存储上的首地址,其中用一级地址描述线性空间在存储上的首地址;用二级地址描述平面空间在存储上的首地址;地址就是指针,所以一级地址、二级地址、多级地址又分别称为一级指针、二级指针和多级指针。,指针与数组的关系,多级指针变量的定义 二级指针变量的定义形式如下: 存储类别符 数据类型符 *指针变量名; 三级指针变量的定义形式如下: 存储类别符 数据类型符 *指针变量名; 更高级别的指针变量的定义形式按照上述形式类推,只需增加更多的星号即可。 int x=100,*y,*z; y=,指针与数组的关系,多级指针变量的引用 例6
3、-1 多级指针变量的引用示例。,指针与数组的关系,一维数组与指针的关系 一维数组元素与指针的关系 定义合适的指针变量后,可以使用指针变量指向数组中的任何一个数组元素。,指针与数组的关系,一维数组与指针的关系 指针变量的算术运算 对于指向数组的指针变量而言,当对指针变量进行加减一个整型常量以及自增/自减运算时,实质上就是将指针变量的指向沿着数组所占据的存储区域向前和向后移动多个或者是一个数组元素的位置。,int a10=0,*p1=a,*p2=a; p1+=3; *p1=100; p2=,0,0,0,0,0,0,0,0,0,0,100,2000,200,1000,指针与数组的关系,一维数组与指针
4、的关系 指针变量的算术运算 对于两个同类型指针变量相减的操作,也只有在这两个指针变量指向同一连续的存储区域时才有实际意义。 两个指针变量差值的绝对值表示了两个指针之间存在着多少个它们所能够指向的数据对象,当然也可以由此计算出两个指针之间距离的字节数。 int a10=1,2,3,4,5,6,7,8,9,10,*p1=a,*p2=a+5;,2,3,4,5,6,7,8,9,10,1,5个整型数据 (20个字节),例6-2 随机生成一个数组的所有元素,并用指针移动的方式输出这些元素值。,指针与数组的关系,一维数组与指针的关系 一维数组与指针的关系 当定义指向数组的指针并使其指向了一个数组后,在指针没
5、有移动的情况下(即指针始终指向数组的0号元素),对该数组某个元素(如i号元素)的地址和元素值而言分别有三种等价的表示形式:,等价的地址表示形式,等价的元素表示形式, 注:式中常量表达式的值就是指针所需要跨过的元素个数; 例: int (*ptr)10; 定义了指针变量ptr; 指针ptr的一次移动可以移动过10个整型数据所占用的连续存储区域;,例6-6 使用指向由若干个元素组成的一维数组的指针处理二维数组。 例6-7 指向若干个元素组成的一维数组指针变量作函数形式参数(求二维数组中全部元素之和)。,指针与数组,指针与数组的关系 指针数组与命令行参数 用指针构成动态数组,指针数组与命令行参数,指
6、针数组 指针数组的概念 如果有一组指向同一类型数据的相关指针也可以对它们使用数组这种数据结构,每一个元素都是指针的的数组称为指针数组。 指针数组定义的一般形式为: 存储类型 数据类型 *数组名常量表达式; 指针数组初始化 存储类型 数据类型 *数组名常量表达式= 字串常量1,字串常量2,;,指针数组与命令行参数,指针数组 用指针数组组织若干同类型的数组 例:int a4,b5,*p2; p0=a; p1=b; 用指针数组组织若干同类型的变量 例: double x,y,*p12; p10=,例6-8 用一维指针数组处理二维数组示例。,指针数组与命令行参数,指针数组 例6-9 编制程序解决下述问
7、题:5个学生,每人所学课程门数不同(成绩存放在一维数组中,以-1表示结束),编写程序输出他们的各项成绩。,指针数组与命令行参数,命令行参数 命令行参数的概念 为了使程序运行时能从系统接收参数,C语言提供了程序在主函数中接收从命令行传递过来的实参的能力,这种参数称为命令行参数。为了接收命令行参数,在定义主函数时使其带上形式参数,其一般形式为: void main(int argc,char *argv) 主函数的形式参数 整型参数用于记录命令行输入的参数个数,习惯于用标识符argc表示; 指向字符的指针数组argv参数用于存放命令行上输入的各实参字符串的起始地址,即指针数组的每一个元素指向一个由
8、命令行上传递而来的字符串。,指针数组与命令行参数,命令行参数 例如,若有C源程序文件为echo.cpp,则编译连接后的执行文件echo.exe,若其源文件中主函数头形式为: void main(int argc,char *argv), 执行程序时命令行为: echo file1.txt file2.txt 则参数传递的结果为:argc=3,例6-10 命令行参数的获取示例。,指针数组与命令行参数,命令行参数 使用命令行参数时的注意点 从命令行上带入的参数都是字符串,如果程序在功能上要求被带入的参数不是作为字符串使用,则需要在应用程序中进行合适的转换。 例6-11 编程序实现功能:在执行程序时
9、从命令行上带入两个实型数据,在程序中求两个实数之和并输出。,指针与数组,指针与数组的关系 指针数组与命令行参数 用指针构成动态数组,用指针构成动态数组,动态数组的概念 动态数组就是可以在程序的运行过程中根据需要创建的数组数据对象。 在支持C99标准的C程序开发环境中,允许程序员根据在程序运行过程中提供的数组长度定义数组,亦即数组空间的分配在程序的运行过程中完成。 在不支持C99标准的C程序开发环境中,通过结合使用C语言的动态存储分配标准库函数和指针变量实现动态数组。,用指针构成动态数组,C语言中的存储分配标准库函数 存储分配标准库函数malloc 函数原型 void *malloc(size_
10、t size); 函数功能 在主存储器中分配由size所指定大小的存储块,返回所分配存储块在存储器中起始位置(指针)。返回指针类型为void(空类型),在应用程序中应根据需要进行相应的类型转换。如果存储器中没有足够的空间分配,即当存储分配失败时返回NULL。,用指针构成动态数组,C语言中的存储分配标准库函数 存储释放标准库函数free 函数原型 void free( void *memblock ); 函数功能 释放由指针变量memblock指明首地址的由malloc类库函数分配的存储块,即将该块归还操作系统。,用指针构成动态数组,C语言中的存储分配标准库函数 重新分配存储标准库函数reall
11、oc 函数原型 void *realloc( void *memblock, size_t size ); 函数功能 将以memblock值为首地址的存储块长度调整为size所指定的长度。分配成功时,若返回的新存储块首地址与由memblock确定的原首地址相同,则不需要进行原块内存放内容的拷贝;若返回的新存储块的首地址与memblock确定的原首地址不同,则需要将原块内存放内容的拷贝新分配的存储块中。,用指针构成动态数组,一维动态数组的建立和使用 实现一维动态数组的基本步骤 定义合适数据类型的一级指针变量。 调用C动态存储分配标准库函数按照指定的长度和数据类型分配存储。 将动态分配存储区域的首地址转换为所需要的指针形式赋值给对应的指针变量。 将指针变量名作为一维数组名操作。,例6-13 编制程序实现冒泡排序功能,程序中假定事先并不知道排序元素的个数。为了模拟数据程序中仍然要求被排序数组用随机函数生成。,用指针构成动态数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度房地产中介客户信息保密协议范本2篇
- 二零二五年三方二手车交易风险防范及保险合同2篇
- 二零二五年度企业合同管理培训与人才发展意见建议书3篇
- 护理本科专业课课程思政教学评价指标体系的构建
- 服装知识培训课件
- 2025版绿色家居装饰工程劳务合作合同2篇
- Unit 4《Lesson 3 My tidy bag》(说课稿)-2024-2025学年粤人版(2024)英语三年级上册
- 工业机器人智能生产线升级改造扩建项目可行性研究报告写作模板-备案审批
- 二零二五年度房地产项目股权划转及融资合作协议3篇
- 湖南省长沙市2025年新高考适应性考试生物学模拟试题(含答案)
- 智能制造企业数字化转型建设方案
- (隐蔽)工程现场收方计量记录表
- 病理生理学课件脂代谢紊乱
- 教师幽默朗诵节目《我爱上班》
- 《细胞工程学》考试复习题库(带答案)
- 中学课堂教学评价量表
- 食堂食材配送以及售后服务方案
- 称量与天平培训试题及答案
- 块单项活动教学材料教案丹霞地貌
- 青年人应该如何树立正确的人生观
- 开封办公楼顶发光字制作预算单
评论
0/150
提交评论