C语言,数组里的指针问题,一道选择题而已,求大神告知

第24题,p1=p-1,意思不就是数组a首元素地址前面的地址吗,那怎么可能判断p1>a成功呢,这里a不就代表数组a的首元素地址吗。。。还有第一个for语句里面判断*p的意... 第24题,p1=p-1,意思不就是数组a首元素地址前面的地址吗,那怎么可能判断p1>a成功呢,这里a不就代表数组a的首元素地址吗。。。还有第一个for语句里面判断*p的意思是判断a为真还是神马,定义的字符指针要判断啥啊。。。快哭了 展开
 我来答
bhtzu
2014-10-25 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4015万
展开全部
a是一个数组,那么变量a本身,就是一个不可改变地址的指针。你说的没错,a就是首元素地址。
那么注意,第一个for循环虽然是空语句,但将p进行了++操作,完成后,是将p指向了a数组的末端后一位(结束标记位'\0')。
第二个for,p1从数组末端开始,每次减一,一直到p1>=a,也就是数组的首端,而p每次加1,实际是扩展了数组的长度,将第4/5/6位分别赋值为3/2/1位,结果是D。
追问
那第一个for的空循环,判断*p----就是它指向地址恒为真导致的咩
追答
for的第二个子语句,是条件判断。;*p; 就是判断*p是否为真,等价于:*p != 0 作为字符串指针,等价于: *p != '\0' ,也就是p没有指向字符串的末尾的意思。加上最后一次的p++,就是让p指向了末尾的 '\0'
ruandou88
2014-10-25 · TA获得超过339个赞
知道小有建树答主
回答量:337
采纳率:0%
帮助的人:301万
展开全部
首先你得了解字符串是以'\0'结束的,也就是a实际存储的是{'x', 'y','z','\0'}.然后你得了解指针加减,一个指针加1,就是指向下一个位置, 在这里实际就是指向下一个字符(如果是int数组,就是下一个整数).

理解了这两点然后再来看你这道题:
首先*p = a,让p指向数组第一个字符'x',for(;*p;p++);让p不断往后移知道遇到’\0'('\0'的实际值是0),也就是循环结束后p指向了‘\0'。for(p1=p-1;p1>=a;p++,p1--)*p=*p1, 把p1初始化指向'z',然后*p=*p1是用'z'覆盖掉'\0',然后p1--就是p1朝后退一步指向’y', p++就是把p向后移一步指向'z'后面。。。接着赋值,直到p1跑到起始地址的前面去了,就是a的前面去了,循环结束。最后*p = 0,就是给字符串加上结束符'\0'...

越写越乱,既然写了就发出来吧。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chenfenggang99
2014-10-25 · TA获得超过1850个赞
知道大有可为答主
回答量:1746
采纳率:75%
帮助的人:1713万
展开全部
B 交换位置
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式