c语言题目

一道选择题
已知:int x[]={1,3,5,7,9,11},*ptr=x;则能够正确引用数组元素的语句是().
A:x B:*(ptr--) C:x[6] D*(--ptr)
这道题选B,但我想知道为什么D不行.

问题补充:不是有()吗? ()优先级在这儿最高,所以(ptr--) 和(--ptr)是一样的吧都是先算括号了的啊即B D是一样的吧

(ptr--)和(--ptr)是不一样的。这里数组范围是x[0]到x[5],如果从x[0]开始引用,则(ptr--)可以引用x[0],至于指针减一后的内容是什么可以不管。而如果是(--ptr)则先进行指针的减,在引用指针的内容。即引用的结果是x[0]存储单元的前一个单元的内容,而不是数组内容。所以这里应该选b。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-13
--ptr是先对ptr的地址加减,然后才进行后面的操作,也就是加减优先;而ptr--是先进行其他操作后,待完成后再对ptr-1.
分开写得话就是*(--ptr):先是ptr=ptr-1;然后*ptr;
而*(ptr--)是:先*ptr;然后ptr=ptr-1追问

可是 有小括号啊 括号优先级在这题目中最高
接着问一下 a=1; b=(a++)+1 ;那么b是等于2还是等于3?

追答

小括号只是为了说明后面是一个整体,因为你如果是*--ptr,这东西系统不认的
b=2

本回答被提问者采纳
第2个回答  2013-01-13
问题在--ptr,因为ptr为,数值x的首地址,如果先进行,--ptr,那么--ptr内装的什么,我们不知道,超出了我们可操作内存地址界限,对数组的首地址操作,只能加,不能减
第3个回答  2013-01-13
ptr--越界了,已经不是x[]了。
相似回答