我有点难以理解为指针设置for循环的测试条件究竟是什么,或者甚至将其设置为变量值而没有任何比较。我在做作业的一个代码示例是:
int f ( char *s, char *t) {
char *p1, *p2;
for (p1 = s; *p1; p1++) {
for (p2 = t; *p2; p2++)
if (*p1==*p2) break;
if (*p2 == ‘\0’) break;
}
return p1-s;
}
我不是在寻找函数的解释,更多的是对两个for循环的测试条件的解释。
答案 0 :(得分:3)
for (p1 = s; *p1; p1++) {
for (p2 = t; *p2; p2++) {
这相当于将*p1
和*p2
与NUL(\0
)进行比较。当字符串的NUL终结符到达时,循环将终止。
for (p1 = s; *p1 != '\0'; p1++) {
for (p2 = t; *p2 != '\0'; p2++) {
您也可以在if
和while
语句中以及其他类型使用此简写。退出条件会根据类型的默认零值检查变量:字符为'\0'
,整数为0
,浮点数和双精度为0.0f
或0.0
,{{ 1}}用于指针。
NULL
答案 1 :(得分:1)
for (p1 = s; *p1; p1++)
为真时, *p1
继续执行循环,即地址p1
处的字符值非零,即p1
未指向一个NUL字节。
答案 2 :(得分:-1)
外循环中的每个字符:
for (p1 = s; *p1; p1++) {
}
是使用指针算法对内部循环测试每个字符的字符,如果有匹配则中断
for (p2 = t; *p2; p2++)
if (*p1==*p2) break;
字符结束或内部循环为NULL,然后从循环中断
if (*p2 == ‘\0’) break;