设有如下数据定义语句: int a[10],*p=a,*q=a+9; 则在下列选项中,没有意义的表达式是??请高手们祥解,

[复制链接]
查看11 | 回复3 | 2010-12-26 13:11:22 | 显示全部楼层 |阅读模式
A.p++
B.q-=1
C.q-p
D.p+=q

回复

使用道具 举报

千问 | 2010-12-26 13:11:22 | 显示全部楼层
答案是D乍一看,给人的感觉是C和D都不对,再分析就不是了:你看,p是一个指针,它的值是a,也就是a[ ]的首地址,等价于a[0]。同理,q实际上是a[9],也就是数组最后一个元素。A. p++ 就是a[1]B. q-=1就是q=q-1就是q[8]C. q-p两个指针相减,这个式子其实是有意义的,比如用在if(q-p)里,当q-p>0也就是q的地址在p后面,if语句判断成立D. p+=q就是p=p+q,p+q式子没什么错,错在不该给p赋值,也就是p+q是没有定义过的,这样的地址加起来毫无意义,可能是内存中的什么值,会引起不必要的错误。
回复

使用道具 举报

千问 | 2010-12-26 13:11:22 | 显示全部楼层
D 因为越界了。A *p=a,代表p指针指向了数组的第一个元素的地址。p++指针偏移,没错。B *p=a+9 。a是数组,作为等号左值时,等同于a[0],a+9就是a[9]。没错Cq指向了a[9] p指向了a[0].相减等同于--q;D p+=q 等同于 p=p+q。一共才10个元素。q指向了a[9] 再偏移一个就是a[10].越界。
回复

使用道具 举报

千问 | 2010-12-26 13:11:22 | 显示全部楼层
选D。A,指针p自加1B,指针q自减1C,指针q-p ,可以做减法的,结果是9。D,加法就不能做了,一个地址加另外一个地址,是什么东东。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行