【发布时间】:2023-02-06 14:55:26
【问题描述】:
执行后的输出结果为______
#include<stdio.h>
int main()
{ char str[]="xyz",*ps=str;
while(*ps)
ps++;
for(ps--;ps-str>=0;ps--)
puts(ps);
return 0;
}
正确答案是zyzxyz
我的逻辑是while(*ps) ps++;之后*ps代表" "数组的最后一个元素
执行codefor(ps--;ps-str>=0;ps--)puts(ps);,*ps时每次都返回两个位置。
所以我认为应该是zxyz
【问题讨论】:
-
“在
while(*ps) ps++;*ps之后代表" "”- 不。*ps就是'\0'。你的程序已经在输出你声称是正确答案的字符串,那么你想改变什么? -
该程序具有未定义的行为,并且不能保证特定的输出。具体来说,将
ps递减到str之前是未定义的行为。 -
循环一次只移动一个元素。我怀疑它是否严格符合语言标准。你正在运行你的指针开始数组,然后将其与数组地址进行比较。这是未定义的行为。据我所知,只有当你跑到另一端时,你才被允许这样做。而且只有最后一次。在那。
-
编译器可能做出的合理优化是注意
ps-str>=0is always true (sinceps` 在法律上永远不能小于str),因此从 for 循环中省略该测试。 -
用伪代码术语来说,代码试图做什么?不要用变量来描述。
标签: c