【发布时间】:2019-06-25 09:37:57
【问题描述】:
在下面的程序中,在 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 32764
在下面的程序中,在 for 循环条件上使用 i
#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 编译器
【问题讨论】:
-
st[i]是一个条件。而i<8是一个条件。当s[i]不为零时,前者为真。后者 - 当i小于8时。差别很大。 -
在第一个尝试
int st[] ={1,2,3,4,5,6,7,8, 0};,看看你会得到什么。 -
您的第一个程序运行超过
st[]的末尾,给出未定义的行为。将st[]的定义更改为int st[] ={1,2,3,4,5,6,7,8,0};,看看会发生什么。零会阻止它,但我不确定你为什么要那样做。 -
如果您在某处看到过第一个循环,您几乎可以肯定该代码正在处理 C 字符串。这是因为 C 字符串总是以 NUL 字符结尾,其值为 0。此技术 not 对任何数组都有效,仅适用于结尾为 0 的数组,其他任何地方都没有零。
标签: c arrays for-loop conditional-statements garbage