C中一个有关“回文”的程序,我改了一下,就不对,为什么?

来源:百度知道 编辑:UC知道 时间:2024/06/06 09:29:34
“abcba"是一个回文。
程序如下:#include <stdio.h>
#include <conio.h>
main ()
{char buf[256];
char *p,*q;
gets(buf);
p=buf;
q=buf;
while(*q) q++;
q--;
while (*p==*q&&p<=q) {p++;q--;}
if(p>=q) printf("%s is huiwen.\n",buf); /*我把这>=改成了==,程序运行就不对了,我想,p怎么能>q,它只能==q,我哪里理解了?*/
else printf("%s is not huiwen.\n",buf);
getch();
return 0;
}
谢谢你们的回答,我看不懂你们的答案。

举个例子 1221 

看下面图片中p,q的位置

地址也可以> <,是根据地址的高低
0x1000<0x1002的

例如abba,它在while循环中p指向第二个b,而q指向第一个不b....不知道这样解释可以吗???

这涉及到c语言中数据的存储问题,一个数据在C语言中的存储占用的不是一个bit,例如,int型数据占2bit,char型数据占4bit,等等,在形成回文之后,很可能p与q的地址不会相等,所以>=是最保险的