大家都是C专家(请不要拍,我不再是C程序员,但我不时会有一个问题出现在我脑海中)
我正在阅读另一个问题(How to print an entered string backwards in C using only a for loop)。
“最简单”和最合乎逻辑的答案是
for (x = end; x >= 0; --x) {
printf("%c", word[x]);
}
但是我想知道是否没有办法实现相同的目标但是更接近原始的循环:
for (x = word[end]; x >= word[0]; x--) {
printf("%c", x);
}
我不知道有足够的C来解决它,但我们不能使用数组指针来循环
char * wordp;
for(wordp = &word[end]; /*something*/; wordp--){\
printf("%c", &wordp);
}
P.S。:我真的不在乎它是向前还是向后循环。
P.P.S:对不起,如果我在指针中犯了明显的C错误;在评论中指出它们,我将编辑它们。 ;)
杰森
答案 0 :(得分:4)
绝对
char *wordp;
for(wordp = word + end; wordp >= word; wordp--){
printf("%c", *wordp);
}
答案 1 :(得分:1)
for (x = word[end]; x >= word[0]; x--) {
printf("%c", x);
}
不起作用,因为单词[end]相当于*(word + end)。它已被解除引用,因此x将被设置为最后一个char的值,并将循环直到它等于第一个char的char值。简而言之,没有任何意义。
尝试:
char * wordp;
for(wordp = (word + end); wordp >= word; wordp--){\
printf("%c", *wordp);
}
请记住,数组只是指向其第一个项目的指针。
答案 2 :(得分:1)
你可以这样做:
char * wordp;
for(wordp = &word[end]; wordp >= word ; wordp--){\
printf("%c", *wordp);
}
答案 3 :(得分:1)
真正的程序员使用递归:
void revputs(char *s) {
if (*s) { revputs(s + 1); putchar(*s); }
}