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

2024-10-28 07:49:12
推荐回答(3个)
回答(1):

a是一个数组,那么变量a本身,就是一个不可改变地址的指针。你说的没错,a就是首元素地址。
那么注意,第一个for循环虽然是空语句,但将p进行了++操作,完成后,是将p指向了a数组的末端后一位(结束标记位'\0')。
第二个for,p1从数组末端开始,每次减一,一直到p1>=a,也就是数组的首端,而p每次加1,实际是扩展了数组的长度,将第4/5/6位分别赋值为3/2/1位,结果是D。

回答(2):

首先你得了解字符串是以'\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'...

越写越乱,既然写了就发出来吧。。。

回答(3):

B 交换位置