c - 在 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 的元素,因此最终会读取数组末尾的内容。这样做会调用未定义的行为,在这种情况下表现为不确定数量的看似随机的值被打印出来。
解决方案
只要中间表达式的计算结果为真,即非零值,for 循环就会继续。所以在这种情况下:
for(i=0; st[i]; i++)
只要st[i]
不为 0,循环就会继续。由于数组中没有包含 0 的元素,因此最终会读取数组末尾的内容。这样做会调用未定义的行为,在这种情况下表现为不确定数量的看似随机的值被打印出来。
推荐阅读
在下面的程序中,在 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 的元素,因此最终会读取数组末尾的内容。这样做会调用未定义的行为,在这种情况下表现为不确定数量的看似随机的值被打印出来。
解决方案
只要中间表达式的计算结果为真,即非零值,for 循环就会继续。所以在这种情况下:
for(i=0; st[i]; i++)
只要st[i]
不为 0,循环就会继续。由于数组中没有包含 0 的元素,因此最终会读取数组末尾的内容。这样做会调用未定义的行为,在这种情况下表现为不确定数量的看似随机的值被打印出来。