在下面的程序中,在 for 循环条件上使用 st[i] 时:

#include<stdio.h> 
int main() 
{ 
     int st[] ={1,2,3,4,5,6,7,8}; 
     int i; ,c,arrays,for-loop,conditional-statements,garbage"/>
	














首页 > 解决方案 > 在 C 编程中,for(int i=0; st[i]; i++) 和 for(int i=0; i 有什么区别?

在下面的程序中,在 for 循环条件上使用 st[i] 时:

#include<stdio.h> 
int main() 
{ 
     int st[] ={1,2,3,4,5,6,7,8}; 
     int i; 

问题描述

在下面的程序中,在 for 循环条件上使用 st[i] 时:

#include<stdio.h> 
int main() 
{ 
     int st[] ={1,2,3,4,5,6,7,8}; 
     int i; 
     for(i=0; st[i]; i++) 
         printf("\n%d %d %d %d", str[i], *(str+i), *(i+str), i[str]); 
     return 0;
}   

输出:

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7
8 8 8 8
-874149648 -874149648 -874149648 -874149648
32764 32764 32764 3276

在下面的程序中,在 for 循环条件上使用 i<8 时:

#include<stdio.h> 
int main() 
{ 
     int str[8] ={1,2,3,4,5,6,7,8}; 
     int i; 
     for(i=0; i<8; i++) 
         printf("\n%d %d %d %d", str[i], *(str+i), *(i+str), i[str]); 
     return 0;
}  

输出输入

1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
7 7 7 7
8 8 8 8

谁能解释一下 st[i] 那边发生了什么。如果它是垃圾值,则意味着它在打印两次额外迭代后停止的原因。

编译器:onlinegdb.com -c 编译器


只要中间表达式的计算结果为真,即非零值,for 循环就会继续。所以在这种情况下:

for(i=0; st[i]; i++) 

只要st[i]不为 0,循环就会继续。由于数组中没有包含 0 的元素,因此最终会读取数组末尾的内容。这样做会调用未定义的行为,在这种情况下表现为不确定数量的看似随机的值被打印出来。

标签: carraysfor-loopconditional-statementsgarbage

解决方案


只要中间表达式的计算结果为真,即非零值,for 循环就会继续。所以在这种情况下:

for(i=0; st[i]; i++) 

只要st[i]不为 0,循环就会继续。由于数组中没有包含 0 的元素,因此最终会读取数组末尾的内容。这样做会调用未定义的行为,在这种情况下表现为不确定数量的看似随机的值被打印出来。


推荐阅读