欢迎来到天天文库
浏览记录
ID:33605827
大小:1.22 MB
页数:42页
时间:2019-02-27
《清华大学c语言程序设计 l12_指针和数组》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机程序设计基础第12讲指针和数组沈瑜(010-62782951)shenyu@tsinghua.edu.cn清华大学电机系2015.12.91主要内容Ø指针的算术运算和数组处理Ø多维数组和多维指针Ø指针与数组的应用举例Ø应用1:指针用于数组处理Ø应用2:用数组名作为函数参数参考教材:第8章、第9.3、9.4节<2>回顾•数组名是数组首元素地址数组名可以看作是指针<3>回顾•数组名与常用指针区别(1)数组名是常量不可以给a2赋值,以上程序将不能通过编译。<4>回顾•数组名与常用指针区别(2)sizeof结果不一样size
2、of(a),求得的是为数组a分配的存储空间sizeof(p),求得的是为变量p分配的存储空间<5>12.1指针的算术运算和数组处理1.回顾:p指向cca[1]•p指向cap是指针变量p中存储了c的p地址程序内存分配含义p可以指向a[1]吗?<6>比较:p指向a[1]ca[1]a程序p内存分配可指向a[5]吗?<7>•数组中元素数目可能非常多。•指向数组的任一元素•都要依靠取地址来实现p指向a[5]吗?<8>也可通过指针前后移动来实现•指针往后移动:–指针与整数相加–例:p+1,指针往后挪动一个元素(表明:指针指向数组下一元
3、素)•指针往前移动–指针与整数相减–例:p-1,指针往前挪动一个单位(表明:指针指向数组上一元素)<9>例1:p指向a[5]通过取地址实现通过前后移动实现指向a[1]再后移4个元素<10>指针前后移动:指针算术运算•指针后移:与整数相加–p+n;指针可以做乘法–p+n指向?和除法吗?•指针前移:与整数相减不可以。–p-n;做乘法和除法没有明–p-n指向?确的物理含义。指针还可以做哪些算术运算呢?<11>p++,p--•p++p=p+1•p--p=p-1Watch一下吧!p,5*p--,什么含义?*p++,什么含义?<12>
4、*p++运算符结合次序:自右向左相当于:*(p++)(*p)++•即:•即:•表达式的值:*p•表达式的值:*p•运算后,指针加1•运算后,指针指向内容加1p=p+1(*p)=(*p)+1<13>指针相减:指针算术运算例2:p2-p1值是?•指针相减:p2–p1求p2与p1之间相隔了多少个元素•如果p2在p1后面,p2–p1值是正还是负?值为正<14>小结——算术运算三种形式•与整数相加–p+n–指针后移n个元素•与整数相减(指针前移)1.针对数组–p-n2.单位为元素个数–指针前移n个元素•指针相减(指针间距离)–p2-
5、p1–指针间相隔多少个元素<15>例3:程序输出结果是?<16>例4:程序输出结果是?<17>这样可以吗?•p++;•p=p+1;•p--;•p=p–1;•p+=n;•p=p+n;•p-=n;•p=p-n;•p[i];•*(p+i)<18>除算术运算外,还可通过比较运算判断前后关系•>,>=p2>p1若成立,表明p2指向元素的地址位于p1指向元素后面•<,<=•==,!=–判断两个指针是否指向同一位置<19>例5:什么含义?是否有错?错误:若文件未打开,指针为空,也会调用fclose函数,导致运行错误<20>正确写法不足之
6、处:异常情况与正常情况混在一起,可读性不好<21>建议写法<22>例6:思考•若指针指向的是变量,而不是数组元素,可以对其进行前后移动的操作吗?•语法上可以但运行时会导致未可知的结果<23>12.2多维数组和多维指针1.学习目标:理解下表名称例子含义二维数组intaa[3][4]一个数组,其每一个元素又是一个数组二维指针int**pp一个指针,指向另一个整型指针数组指针int(*p)[4]一个指针,指向长为4的数组指针数组int*p[3]一个数组,其每一个元素又都是一个整型指针<24>2.详解:理解aa[i]•aa[i],
7、实质:长为4的数组–有4个元素–每个元素都是整数–aa[i]为这个数组首元素的地址•&aa[i][0]•&aa[i]<25>3.详解:理解&p0•p0是指针变量–指向整数aa[0][0]•&p0是指针变量的地址•若将&p0记录在变量pp中,则:–需通过两次间接寻址才能找到原始变量aa[0][0]•先找到pp•通过pp找到p0•通过p0找到aa[0][0]<26>4.详解:理解int**pp•pp是一个指向指针变量的指针–通过两次间接访问才能找到原始变量aa[0][0]–称pp为二维指针–用两个星号作为标记两个星号,表明二维
8、指针表明需要进行二次间接寻址<27>5.详解:理解intaa[3][4]•aa是一个长为3的数组–aa有三个元素–每个元素又都是一个数组•aa[0],aa[1],aa[2]•aa[0]:指针<28>6.详解:理解int(*pp)[4]•根据结合律,pp是一个指针•这个指针指向什么呢?–将*pp用变量a代
此文档下载收益归作者所有