*a 和 *a!='\0'有什么区别,#include main(){char s[10]="hello!";inverp(s);}inverp(char *a){if(!*a) return 0;inverp(a+1);printf("%c",*a);}如果if条件句改为 *a!='\0' 就不对了,为什么.这个程序 是怎么实现的

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 10:58:28

*a 和 *a!='\0'有什么区别,
#include
main()
{
char s[10]="hello!";
inverp(s);
}
inverp(char *a)
{
if(!*a)
return 0;
inverp(a+1);
printf("%c",*a);
}
如果if条件句改为 *a!='\0' 就不对了,为什么.
这个程序 是怎么实现的

看其真值即可
*a 0 1
!*a 1 0
*a 0 1
*a!='\0' 0 1
------------------------------------
相反吧,所以你那样写不对,可以改为*a == '\0' 或直接写 *a == 0,但这样还是比不上!*a 来得清楚自然.这是递归程序,程序一直调用自身至遇到结束符0才停止,并反向打印字母.就像堆栈一样,先调用的最后才执行.