设有如下数据定义语句: int a[10],*p=a,*q=a+9; 则在下列选项中,没有意义的表达式是??请高手们祥解,
发布网友
发布时间:2023-08-09 01:00
我来回答
共3个回答
热心网友
时间:2023-09-29 08:59
答案是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是没有定义过的,这样的地址加起来毫无意义,可能是内存中的什么值,会引起不必要的错误。
热心网友
时间:2023-09-29 08:59
D 因为越界了。
A *p=a,代表p指针指向了数组的第一个元素的地址。p++指针偏移,没错。
B *p=a+9 。a是数组,作为等号左值时,等同于a[0],a+9就是a[9]。没错
C q指向了a[9] p指向了a[0].相减等同于--q;
D p+=q 等同于 p=p+q。一共才10个元素。q指向了a[9] 再偏移一个就是a[10].越界。
建议看看基础。
热心网友
时间:2023-09-29 09:00
选D。
A,指针p自加1
B,指针q自减1
C,指针q-p ,可以做减法的,结果是9。
D,加法就不能做了,一个地址加另外一个地址,是什么东东。。。。