大一上-c语言程序设计基础_第1页
大一上-c语言程序设计基础_第2页
大一上-c语言程序设计基础_第3页
大一上-c语言程序设计基础_第4页
大一上-c语言程序设计基础_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章指针与数组何光宇2011补充知识点:字符串连接符\\——放在行末,将多行字符串连接成一个目录——指针与数组指针算术运算指针用于数组处理用数组名作为指针指针和多维数组应用复习:p指向cp指向cp是指针变量p中存储了c的地址pca程序内存分配含义p可以指向a[1]吗?a[1]p指向a[1]pca程序内存分配a[1]可指向a[5]吗?p指向a[5]数组中元素数目可能非常多。指向数组的任一元素都要依靠取地址来实现吗?也可通过指针前后移动来实现指针往后移动:指针与整数相加例:p+1,指针往后挪动一个元素(表明:指针指向数组下一元素)指针往前移动指针与整数相减例:p-1,指针往前挪动一个单位(表明:指针指向数组上一元素)例1:p指向a[5]通过取地址实现通过前后移动实现指向a[1]再后移4个元素指针前后移动:指针算术运算指针后移:与整数相加p+n;p+n指向?指针前移:与整数相减p-n;p-n指向?指针可以做乘法和除法吗?不可以。做乘法和除法没有明确的物理含义。指针还可以做哪些算术运算呢?指针相减:指针算术运算指针相减:p2–p1求p2与p1之间相隔了多少个元素如果p2在p1后面,p2–p1值是正还是负?值为正例2:p2-p1值是?小结——算术运算三种形式与整数相加p+n指针后移n个元素与整数相减(指针前移)p-n指针后移n个元素指针相减(指针间距离)p2-p1指针间相隔多少个元素1针对数组2单位为元素个数例3:程序输出结果是?例4程序输出是?这样写可以吗?p++;p--;p+=n;p-=n;p=p+1;p=p–1;p=p+n;p=p-n;除算术运算外,还可通过比较运算判断前后关系>,>=p2>p1

若成立,表明p2指向元素的地址位于p1指向元素后面<,<===,!=判断两个指针是否指向同一位置例5:什么含义?是否有错?错误:若文件未打开,指针为空,也会调用fclose函数正确写法异常情况与正常情况混在一起,可读性不好建议写法例6:思考若指针指向的是变量,而不是数组元素,可以对其进行前后移动的操作吗?语法上可以但运行时会导致未可知的结果目录——指针与数组指针算术运算指针用于数组处理用数组名作为指针指针和多维数组应用例1:程序输出是?p?

指向a的首元素p+i?*(p+i)?

程序输出是?由于可通过指针移动指向数组任意元素,因此,也可通过指针对数组元素进行处理例2:程序输出是?*p++相当于:*(p++)即:*pp++与(*p)++区别即:*p(*p)++运算符结合次序:自右向左例3:程序对错辨析1程序是否有错?2如果没错,程序运行结果?目录——指针与数组指针算术运算指针用于数组处理用数组名作为指针指针和多维数组应用数组名是数组首元素地址数组名可以看作是指针数组名与常用指针区别(1)数组名是常量不可以给a2赋值,以上程序将不能通过编译。数组名与常用指针区别(2)sizeof结果不一样sizeof(a),求得的是为数组a分配的存储空间sizeof(p),求得的是为变量p分配的存储空间目录——指针与数组指针算术运算指针用于数组处理用数组名作为指针指针和多维数组应用注意:

aa[i]代表了什么?详解:理解aa[i]aa[i],实质:

长为4的数组有4个元素每个元素都是整数aa[i]为这个数组首元素的地址&aa[i][0]aa?详解:理解&p0p0是指针变量指向整数aa[0][0]&p0是指针变量的地址若将&p0记录在变量pp中,则:需通过两次间接寻址才能找到原始变量aa[0][0]

先找到pp

通过pp找到p0通过p0找到aa[0][0]详解:理解int**pppp是一个指向指针变量的指针通过两次间接访问才能找到原始变量aa[0][0]称pp为二维指针用两个星号作为标记两个星号,表明二维指针表明需要进行二次间接寻址详解:理解intaa[3][4]aa是一个长为3的数组aa有三个元素每个元素又都是一个数组aa[0],aa[1],aa[2]aa[0]:指针详解:理解int(*pp)[4]

根据结合律,pp是一个指针这个指针指向什么呢?将*pp用变量a代替,得到?inta[4]pp指向一个长为4的整数数组aa正是长为3的数组的首元素的地址。首元素是长为4的整数数组

可以将aa赋给pp详解:理解int*pp[3]根据结合律(次序:从右到左),pp是一个数组pp的长度为3pp[i]:存储整数变量的地址aa[i],代表整数变量aa[i][0]的地址可将aa[i]赋给pp[i]总结名称例子含义二维数组intaa[3][4]

一个数组,其每一个元素又是一个数组二维指针int**pp

一个指针,指向另一个整型指针数组指针int(*p)[4]一个指针,指向长为4的数组指针数组int*p[3]

一个数组,其每一个元素又都是一个整型指针例1:理解intaaa[3][4][5]aaa长为3的数组每个元素都是一个数组(二维)aaa[i]长为4的数组每个元素都是一个数组(一维)aaa[i][j]长为5的数组每个元素都是一个整数目录——指针与数组指针算术运算指针用于数组处理用数组名作为指针指针和多维数组应用数组作为函数参数经常需要将数组作为函数参数例:求整个数组中最大元素对数组进行排序例1:求整个数组最大元素详解1:数组名作为参数a是指针,因此对应参数p也定义为指针不建议写成:int

findMax(intp[],intlen)这样定义的p依然是指针详解2:指针的算术运算p是指针,p[k]即相当于*(p+k)详解3:数组长度的处理数组长度可以不传过来吗?这样呢?也不可以p是指针,不是数组。因而sizeof(p)的值为4.有变通方法吗?有可以在数组中加入特殊元素从数组首元素,依次往后进行处理当碰到特殊元素时,即表明数组元素全部处理完毕对字符数组,为不将数组长度作为参数,一般使用

‘\0’作为特殊元素以‘\0’结束的字符数组,称为字符串例2:快速排序算法对长为n的字符数组a,用如下算法进行排序:1将a[0]插入数组中适当位置k,使得:其ASCII代码值大于所有排在其前的字符,而小于所有排在其后的字符2递归对子数组a[0]~a[k-1]进行排序3递归对子数组a[k-1]~a[n-1]进行排序子任务:将a[0]插入数组中适当位置k

任务:将数组首字符排到数组中适当位置,使得其ASCII代码值大于所有排在其前的字符,而小于所有排在其后的字符算法?算法交换找到比a[0]大的数初始状态找到比a[0]小的数交换重复以上过程即可技能:好程序是如何写出来的遵循测试驱动的开发方法先写测试,再写程序不断改进程序,使测试通过示例V-0.1V-0.2小结1——算术运算与逻辑运算与整数相加p+n指针后移n个元素与整数相减(指针前移)p-n指针后移n个元素指针相减(指针间距离)p2-p1指针间相隔多少个元素1针对数组2单位为元素个数比较地址前后可用:<,<=,>,>=,==,!=小结2:多维数组与多维指针名称例子含义二维数组intaa[3][4]

一个数组,其每一个元素又是一个数组二维指针int**pp

一个指针,指向另一个整型指针数组指针int(*p)[4]一个指针,指向长为4的数组指针数组

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论