c语言常量l12和意义,课件c语言l12_指针和数组

《课件c语言l12_指针和数组》由会员分享,可在线阅读,更多相关《课件c语言l12_指针和数组(42页珍藏版)》请在人人文库网上搜索。

1、计算机程序设计基础第12讲指针和数组沈瑜(010-62782951)shenyutsinghua.edu.cn清华大学电机系2015.12.91主要内容?指针的算术运算和数组处理数组和指针?指针与数组的应用举例?应用1:指针用于数组处理?应用2:用数组名作为函数参数参考教材:第8章、第9.3、9.4节回顾 数组名可以看作是指针 数组名是数组首元素地址回顾 数组名是常量不可以给a2赋值,以上程序将不能通过编译。 数组名与常用指针区别(1)回顾 sizeof结果不一样sizeof(a), 求得的是为数组a分配的存储空间sizeof(p), 求得的是为变量p分配的存储空间 数组名与常用指针区别(2)。

2、12.1 指针的算术运算和数组处理1. 回顾:p指向ccaa1p指向cp是指针变量 p中存储了c的地址 p程序内存分配p可以指向a1吗?含义比较:p指向a1caa1程序p内存分配可指向a5吗? 数组中元素数目可能非常多。 指向数组的任一元素 都要依靠取地址来实现吗?p指向a5也可通过指针前后移动来实现指针往后移动: 指针与整数相加 例:p+1, 指针往后挪动一个元素(表明:指针指向数组下一元素)指针往前移动 指针与整数相减 例:p-1,指针往前挪动一个单位(表明:指针指向数组上一元素)例1: p指向a5通过取地址实现通过前后移动实现指向a1再后移4个元素指针前后移动:指针算术运算指针后移:与整。

3、数相加 p+n; p+n指向?指针前移:与整数相减 p-n; p-n指向?指针可以做乘法和除法吗?指针还可以做哪些算术运算呢?不可以。做乘法和除法没有明确的物理含义。p+, p-p+p= p+1p-p= p-1Watch一下吧! p, 5*p-, 什么含义?*p+, 什么含义?*p+运算符结合次序:自右向左相当于:*(p+)(*p)+即:表达式的值:*p 运算后, 指针加1p = p+1即:表达式的值:*p运算后,指针指向内容加1(*p) = (*p) + 1指针相减:指针算术运算例2:p2-p1值是?指针相减:p2 p1求p2 与p1之间相隔了多少个元素如果p2在p1后面,p2 p1值是正还。

4、是负?值为正小结算术运算三种形式与整数相加 p+n 指针后移n个元素与整数相减(指针前移)1. 针对数组2. 单位为元素个数 p-n 指针前移n个元素指针相减(指针间距离)p2-p1 指针间相隔多少个元素例3:程序输出结果是?例4:程序输出结果是?这样可以吗?p+;p-;p+=n; p-=n;pi;p = p+1;p = p 1; p = p + n; p = p - n;*(p+i)除算术运算外,还可通过比较运算判断前后关系,=p2 p1若成立,表明p2 指向元素的地址位于p1指向元素后面例5:什么含义?是否有错?错误:若文件未打开,指针为空,也会调用fclose函数,导致运行错误正确写法不。

5、足之处:异常情况与正常情况混在一起,可读性不好建议写法例6:思考若指针指向的是变量,而不是数组元素, 可以对其进行前后移动的操作吗?语法上可以但运行时会导致未可知的结果数组和指针12.21. 学习目标:理解下表名称二维数组例子含义一个数组,其每一个元素int aa34又是一个数组一个指针,指向另一个整二维指针int *pp型指针数组指针一个指针,指向长为4的数组一个数组,其每一个元素又都是一个整型指针int (*p)4指针数组int *p32. 详解:理解aaiaai, 实质: 长为4的数组 有4个元素 每个元素都是整数aai 为这个数组首元素的地址 &aai0&aai3. 详解:理解 &p0。

6、p0 是指针变量 指向整数 aa00 &p0 是指针变量的地址 若将 &p0记录在变量pp中,则: 需通过两次间接寻址才能找到原始变量aa00 先找到pp通过pp找到p0通过p0找到 aa004. 详解:理解 int *pppp 是一个指向指针变量的指针 通过两次间接访问才能找到原始变量 aa00称pp为二维指针 用两个星号作为标记两个星号,表明二维指针表明需要进行二次间接寻址5. 详解:理解 int aa34aa 是一个长为3的数组 aa有三个元素 每个元素又都是一个数组 aa0,aa1,aa2aa0 :指针 6. 详解:理解 int (*pp)4根据结合律,pp是一个指针这个指针指向什么呢。

7、? 将*pp 用变量a代替, 得到? int a4pp指向一个长为4 的整数数组aa 正是长为3的数组的首元素的地址。 首元素是长为4的整数数组可以将aa赋给pp指向数组的指针6. 详解:理解 int *pp3根据结合律(次序: 从右到左),pp是一个数组 pp的长度为3 ppi:存储整数变量的地址aai, 代表整数变量aai0 的地址可将aai 赋给 ppi指针的数组12.3 指针与数组应用举例 应用1:指针用于数组处理 可通过指针移动指向数组任意元素 因此,可通过指针对数组元素进行处理 应用2:数组名作为函数参数 数组名就是指针 因此,数组名作为函数参数,相当于以指针作为函数参数1.应用1。

8、:指针用于数组处理 Question: p 是指针,那么p+i 相当于&pi?*(p+i) 相当于pi ?p+i 相当于&pi*(p+i) 相当于pi例1:程序输出是?p? 指向a的首元素p+i ?*(p+i) ?程序输出是? 由于可通过指针移动指向数组任意元素, 因此,也可通过指针对数组元素进行处理例2:程序输出是?1.应用2:用数组名作为函数参数要点: 与 用指针作为函数参数一样例1:求整个数组最大元素详解1:数组名作为参数a是指针,因此对应参数p也定义为指针不建议写成:int findMax(int p,int len)这样定义的p依然是指针详解1:指针的算术运算回顾: p是指针,pk 。

9、即相当于 *(p+k)详解2:数组长度的处理数组长度可以不传过来吗? 这样对吗?也不可以p是指针,不是数组。 因而sizeof(p) 的值为4.有变通方法吗?有可以在数组中加入特殊元素 从数组首元素,依次往后进行处理 当碰到特殊元素时,即表明数组元素全部处理完毕对字符数组,为不将数组长度作为参数,一般使用0作为特殊元素以0结束的字符数组,称为字符串12.4 函数指针1. 指向函数的指针指向函数的指针例如: float fun(int,char); float (* p)( ); pfun; 函数名,表示函数的地址2.用函数指针变量调用函数可用函数指针来调用函数. 其形式为:(*函数指针变量名)()int i=5; char ch=a; float fun(int,char); fun(i,ch); 例如: int i=5; char ch=a;float fun(int,char),(*p)( ); pfun; (*p)(i,ch); 例:批量测试数学函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值