代码:
int main()
{
int i;
char p[]="Hello",b[]="World!";
for (i = 0; *p != '\0' ; i++, p+1); //what does the p+1 after ,
printf("%s%s",p,b);
return 0;
}
我的问题是循环的确切行为如何,因为这个程序永远不会结束,但如果我写
for(i=0; *p != '\0'; i++, printf("hi")); //this prints out hi
答案 0 :(得分:1)
您评估p+1
,但您从未将其存储在变量p
中。因此,你永远不会“走”字符串,你永远不会找到终止字符。
评估p+1
与p++
不同(评估p,然后将其递增并存储在p中)。
此外 - 您在for
语句后面有一个分号,因此在循环终止之前您永远不会执行任何操作。换句话说,printf("%s%s",p,b);
语句不是for
循环的一部分(以防万一你想知道)。
通过将循环更改为:
,您可以看到这是真的char* x;
for (i = 0; i<5 ; i++, x=p+1) {
printf("%s\n", x);
}
看看会发生什么:
ello
llo
lo
o
您通常会这样做:
for (i = 0; *p != '\0' ; i++, p++) {
printf("%s %s\n",p,b);
}
让你
Hello World
ello World
llo World
lo World
o World
答案 1 :(得分:0)
i++, p+1
中的逗号运算符只执行这两项操作,即增量i
然后评估(但抛弃结果)p+1
。也许你的意思是i++, p++
。