下面程序的输出是6。我不知道为什么。当我手绘它的时候,我得到了5。
#include<stdio.h>
#include<conio.h>
main()
{
int i,count=0;
char *p1="abcdefghij";
char *p2="alcmenfoip";
for(i=0;i<=strlen(p1);i++) {
if(*p1++ == *p2++)
count+=5;
else
count-=3;
}
printf("count=%d",count);
}发布于 2013-09-17 21:37:16
if(*p1++ == *p2++)正在逐个字符读取p1和p2。当字符相同时,它会将count增加5,否则会减少3。但是,还有一件事你没有注意到:strlen(p1)在每次迭代中总是不同的,因为p1会改变。因此,在每次迭代中,您还需要检查它的值。
p1 p2 count i strlen (before entering into the loop body)
a a 5 0 10
b l 2 1 9
c c 7 2 8
d m 4 3 7
e e 9 4 6
f n 6 5 5 <- No more - this is the last one发布于 2013-09-17 21:37:18
这里的诀窍是,strlen(p1)在每次迭代中都会发生变化。所以循环条件是
0 <= 10 +5
1 <= 9 -3
2 <= 8 +5
3 <= 7 -3
4 <= 6 +5
5 <= 5 -3因此相等的字符是a、c、e,如上面的+5所示。总数是6。
发布于 2013-09-17 21:37:07
您的程序在i>strlen(p1)时停止,因为您每次执行*p1++时都会更改p1。
在计算条件时,strlen返回来自las char的大小。
如果你在开始时(在你的循环之前)把这个值存储在一个变量中,它应该可以工作。
不管怎样,尽量避免指针算法...
https://stackoverflow.com/questions/18851157
复制相似问题