Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环结构:在C中为_C_Loops_For Loop - Fatal编程技术网

循环结构:在C中为

循环结构:在C中为,c,loops,for-loop,C,Loops,For Loop,代码: 我的问题是for循环到底是如何运行的,因为这个程序永远不会结束,但如果我编写 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; } 您计算p+1,但从不将其存储在变量p中。因此,您永远不会“沿着”字符串,也永远不会找到终

代码:

我的问题是for循环到底是如何运行的,因为这个程序永远不会结束,但如果我编写

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;
}

您计算
p+1
,但从不将其存储在变量
p
中。因此,您永远不会“沿着”字符串,也永远不会找到终止字符

计算
p+1
p++
不同(后者计算p,然后将其递增并存储在p中)

另外,在
for
语句后面有一个分号,因此在循环终止之前,您不会执行后面的任何操作。换句话说,
printf(“%s%s”,p,b)
语句不是
for
循环的一部分(以防万一)

通过将循环更改为:

for(i=0; *p != '\0'; i++, printf("hi")); //this prints out hi
您通常会这样做:

ello
llo
lo
o
这让你生气

for (i = 0; *p != '\0' ; i++, p++) {
  printf("%s %s\n",p,b);
}

i++,p+1
中的逗号运算符只做这两件事,即递增
i
然后计算(但丢弃)
p+1
的结果。也许您的意思是
i++,p++

您没有分配给
p
,您在值中添加1,然后丢弃它。你的意思可能是
p+=1
p++
。当然,因为你从不改变
p
。为什么你有一个变量
i
,你什么都不用?@Kninnug
p
不是一个可修改的l值。无法为其赋值。请注意,通常需要在
printf()之后加一个换行符来强制显示输出。它在Windows上的工作方式必须稍有不同,因为我们看到无休止的基于Windows的C程序没有换行符,但这些程序不能正常地传输到Unix。
for (i = 0; *p != '\0' ; i++, p++) {
  printf("%s %s\n",p,b);
}
Hello World
ello World
llo World
lo World
o World