欢迎来到天天文库
浏览记录
ID:58048682
大小:97.50 KB
页数:11页
时间:2020-04-09
《《C--语言程序设计》第3次作业讲评.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、《C++语言程序设计》第三次作业讲评说明:本次作业对应教材第六、七章的内容。【讲评】本章主要考核大家对指针的概念的理解,要求掌握指针变量的定义和初始化、指针的各种操作、一维数组元素的下标访问方式与指针访问方式及其之间的转换、引用的概念以及动态空间管理等内容。内容相对前面章节比较难,希望通过作业讲评能够帮助大家把学习中的难题一一解决。下面是对部分问题的讲评。一、填空题1.假定p所指对象的值为28,p+1所指对象的值为62,则*p++的值为28。【讲评】这中题目比较难,因为前++和后++的操作本来对大家来说就很迷糊,再加上指针的操作就更乱了,其实只要
2、理清思路,这中问题不难做,最好在纸上画一个图更容易理解。为了便于理解,我们先将p这个指针所指的地址假设为1000,那么在内存1000处,就存放这28这个值,而下一个单元即1004处存放着62这个值。如下左图:这里*p++的操作相当于*(p++),先执行括号内的操作p++,注意无论是p++还是++P,最终的结果都会使p增1,因为p是一个指针,那么增1的操作实际上就是使得p的值增加一个单元的字节数4,p的值变为1004,也就是使p指向下一个单元。但注意这里是后增1的操作所以表达式(p++)取值应该取增1之前的原来p的值1000,在执行*的操作,就是取
3、1000处的数据,显而易见为28。但执行完成后,p的所指的值为62,如上右图所示。注意题目的问法。2.假定p所指对象的值为28,p+1所指对象的值为62,则*++p的值为62。【讲评】同上一题比较,这里将原来的后++操作变成了前++,具体的就不阐述了,这次表达式在取值的时候取得是p增1之后的值即1004处的数据62。3.假定p所指对象的值为25,p+1所指对象的值为50,则执行“(*p)++;”语句后,p所指对象的值为26。【讲评】注意这个题目的问法和上面两个不一样,这个问执行整个语句后,p所指的值,而上面两题的问法是整个表达式的值。你在完成时,
4、还是用上面的方法——画图。(*p)++的执行过程,应该先执行括号内的操作。取当前p所指对象的值25,再另其进行后增1的操作,那么此处的25应该变为26,注意这里没有问“(*p)++的值是什么”,如果问了,那么(*p)++的值应该是增1之前的值25,而这个题问你的是,语句执行后,p所指对象的值,所以为26。4.假定p所指对象的值为25,p+1所指对象的值为50,则执行“*(p++);”语句后,p所指对象的值为50。【讲评】根据上面的方法可自己分析。5.假定a是一个指针数组,则a+i所指对象的地址比a地址大4*i字节。【讲评】参看教学辅导第六章的内容
5、,里面有图帮助理解,后面的几个题目也是如此。6.假定a是一个一维数组,则a[i]的指针访问方式为*(a+i)。7.假定a是一个二维数组,则a[i][j]的指针访问方式为*(a[i]+j)或*(*(a+i)+j)。8.假定a是一个一维数组,则a[i]对应的存储地址(以字节为单位)为a+i*sizeof(a[0])。9.假定一个二维数组为a[M][N],则a[i][j]对应的存储地址(以字节为单位)为a+(i*N+j)*sizeof(a[i][j])。10.假定一个二维数组a[M][N],则a[i]的地址值(以字节为单位)为a+(i*N)*sizeo
6、f(a[0][0])或a+i*sizeof(a[i])。11.假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大4字节。12.假定a为一个字符数组名,则元素a[8]的字节地址为a+8。13.假定a为一个整型数组名,则元素a[4]的字节地址为a+16。14.假定一个结构类型的定义为“structA{inta,b;shortc;A*d;};”,则该类型的大小为14字节。【讲评】这种题目考题中经常出现,先把结构中有几个成员搞清楚,结构类型的大小就是它的所有成员所占空间大小之和。这里结构体A中共有4个成员:整型变量a和b,
7、短整型变量c,结构体A型指针变量d,a、b、c共占有4+4+2=10个字节的空间,容易搞错的是d所占字节数,记住不管是什么类型的指针变量永远占有4个字节。所以答案是14个字节。15.假定一个结构类型的定义为“structB{inta[8];char*b;};”,则该类型的大小为36字节。【讲评】这个应该不难理解,4×8+4=3616.假定一个结构类型的定义为“structD{inta;union{intb;doublec;};D*d[3];};”,则该类型的大小为24字节。【讲评】这里容易错的是中间的联合体union部分,注意结构体D中只有三个成
8、员而不是四个,因为中间的联合体只取其中一个成员,所占空间就是它的所有成员中占空间最大的那个,所以联合所占空间为8个字节(来自double
此文档下载收益归作者所有