- 1、本文档共61页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言内涵教程 周二强 zeq126@126.com 中国铁道出版社 ISBN9787113163815 第9章 指针 9.4 地址可以参与的运算 9.5 指针与数组 9.5.1 指针与一维数组 9.5.2 指针与二维数组 9.5.3 指针与字符串 9.4 地址可以参与的运算 指针变量可以与一个整数做加法或减法运算。 如果一个整型指针变量pi的右值为int型地址 0x0012 ff00,则pi + 1的值是多少呢? 再次强调:做加法运算时变量表现为右值(内容),即使这个表达式位于赋值操作符的左边。通常只有赋值时变量才表现为左值。 例9-10 分析下面程序的输出 p指向了a[0]标识的存储单元,则p+i指向? p指向了a[0]标识的存储单元,则p+i指向? i为0时,p+0指向a[0] i为1时,p+1指向 p所指向的存储单元相邻的下一个同类型存储单元,即a[1], p+i指向? a[i], p+i的值为? 故*(p+i)与a[i]可互换使用! 例9-11 设指针变量p的右值为0x0012 ff00,求其定义如下时p+1的右值。 1. char *p; 2. char (*p)[5]; 分析: p+1 指向p所指向的存储单元相邻的下一个同类型存储单元,因此,它的右值与变量p指向存储单元的类型有关,即它是什么样的指针变量相关。 1.指针变量p为字符型指针变量,因此,p+1的右值为字符型地址0x0012ff01。 2. char (*p)[5]; 语句char (*p)[5];中括号操作符与下标操作符的优先级相同,左结合,因此,先解释括号操作符,*p说明变量p为指针变量。定义中的剩余部分char [5]说明了指针变量所指向存储单元的类型,即长度为5的字符型数组, 因此,p + 1的右值为0x0012 ff05,即类型为有5个元素的字符型数组的存储单元的地址,可简记为char [5]型地址0x0012 ff05。 指针变量的减法 指针变量也可以减去一个整数。p - 1的结果为与指针变量p右值同类型的地址,即与指针变量p指向的存储单元相邻的上一个同类型存储单元的地址。 两个同类型的指针变量可以相减,结果为整数,表示两个变量之间相差几个同样的存储单元。 其它运算 对于指针变量p,p = p + 1;同样可简写为p += 1;或++p;、p++;。p = p – 1;与此类似。 两个同类型的指针变量可以进行等于(==)或不等于(!=)比较运算,如果两个指针变量相等,则它们指向同一块存储单元。两个同类型的指针变量也可以进行、、=和=比较运算。 指针变量的运算通常与数组元素相关时才有实际意义。 9.5 指针与数组 方括号[ ]是一种下标操作符,如有数组a,则a[e]的操作过程可理解为*(a+e)。数组名a也参与了运算,它的值是多少呢? C语言规定:数组变量(a)的右值为数组首元素的地址(a[0])。 下标操作符也可用于指针变量,如有指针变量p,则p[e]也等价于*(p+e)。可见,指针与数组有着密切的关系。 9.5.1 指针与一维数组 例9-12 已知int a[3] = {1, 2, 3};如何理解数组a? 设数组变量a在内存中的状态如图所示。 分析表达式 sizeof(a) a = 3 sizeof(a+1) *a+1 *(a+1) 例9-12 已知int a[3] = {1, 2, 3}; int *pi;且pi=a;后。 分析表达式 pi++ *pi++ *++pi pi[2] 例9-13 分析下面的程序 例9-14分析下面的程序 分析下面的程序 例9-15 分析例7-10。 与数组兼容的普通指针类型 如果一个普通的指针变量可以用某数组变量赋值,则称该类型的普通指针变量与此数组类型“兼容”。 C语言规定,形参的类型为数组时,数组类型会转化为与之“兼容”的普通指针类型。 数组与其首元素的地址 获得了数组首元素的地址,就可以使用数组中的元素了。 数组是一组变量,标识了一组地址连续的同类型存储单元,因此,一个数组有时就表现为其首元素的地址 。 9.5.2 指针与二维数组 例9-16 如何理解二维数组? 以二维数组int a[3][2] = {{1, 2}, {21, 22}, {31, 32}}为例,设它的内存状态如图所示。 二维数组变量a a[0]是一个长度为2的一维整型数组,它的存储单元含有两个整型元素,因此它的存储单元的类型为int[2],由此可知,变量a存储的内容为int[2]型地址。 数组变量a指向了一个int[2]型存储单元! a,a[0],a[0][0]的关系 分析表达式a, a + 1, a + 2 a是一个地址型的虚拟变量 变量a指向a[0],故a+1指向 与a[0]相邻的下一
您可能关注的文档
- C语言程序设计孙淑霞罗奕主编C语言程序设计09763第十一章节.ppt
- C语言程序设计孙淑霞罗奕主编C语言程序设计09763第十章节.ppt
- C语言程序设计孙淑霞罗奕主编C语言程序设计09763第四章节.ppt
- 乒乓球起源及相关技术介绍.ppt
- C语言程序设计孙淑霞罗奕主编C语言程序设计09763第五章节.ppt
- C语言程序设计孙淑霞罗奕主编C语言程序设计09763第一章节.ppt
- 乌鲁木齐博雅思源简介.ppt
- C语言程序设计唐云廷第0章节C语言概述.ppt
- C语言程序设计唐云廷第1章节程序的概念与算法09_09_NIT_L.ppt
- C语言程序设计唐云廷第2章节C语言程序的基本构成09_09_NIT_L.ppt
最近下载
- 人工智能背景下高校教学模式改革研究.docx VIP
- 部编版三年级语文下册期末《非连续性文本阅读》专项精选试卷-附答案.doc VIP
- 人工智能背景下的职业教育混合教学模式构建与实施.docx VIP
- 湖北省武汉市2025届高中毕业生四月调研考试政治试题及答案(武汉四调).pdf
- Unit5大单元教学设计 人教版八年级英语下册.pdf
- 陕西财政云单位核算系统使用手册.docx
- 【营销策划】2024奥迪品牌技巧分析中英双版.pptx
- 肥胖诊疗门诊建设专家指导意见(2024年版).pdf
- 2024奥迪品牌技巧分析中英双版.pdf
- 2024 奥迪分析 : 奥迪品牌、技巧、平台等奥迪分析师日 2024.pdf
文档评论(0)