在 For 循环中初始化数组的紧凑代码
Compact Code for Initialization an Array in For-loop
我正在审查包含以下代码片段的代码,以获取最小的可重现示例。所以这里的代码 运行 是一个初始化数组 done
的迭代,如下所示:
#include <stdio.h>
int i,j;
N=10;
int done[500];
void main() {
done[0]=done[N]=1;
for(i=0;i<N+1;done[i++]=0){
printf("Done val %d iteration %d\n",done[i],i);
}
}
我关心的是我故意初始化了 done[0]=done[1]=1
的值但是当我 运行 初始化循环时,索引 0 和 10 处的值保持不变。我想了解 done[i++]
的语法实际上是如何评估的?
for
循环的递增步骤发生在 循环体执行之后。相当于下面的代码:
i = 0;
while (i < N+1) {
printf("Done val %d iteration %d\n",done[i],i);
done[i++] = 0;
}
如您所见,它在 更改它之前打印 done[i]
的值。所以它打印原始值。
您提供的代码片段一开始就无法正确编译!虽然,我假设您已经知道原因。所以,我简单回答你的问题。
首先,您没有按照预期的方式初始化索引。您改为执行以下操作:
done[0]=done[N]=1;
因此,索引零将设置为一,但索引十设置为一而不是索引一。因此,您应该执行以下操作:
done[0]=done[1]=1;
至于for循环本身,你要明白你的增量变量是最后执行的! for 循环是一个遵循程序顺序的三步过程,其中,
- 增量变量被初始化
- 检查条件语句
- 如果条件语句为true,则执行code body then increment/decrement 增量变量,然后转到第二步。否则退出for循环!
因此,done[i++]=0 在提供的代码块中的 printf() 语句之后得到评估!更多信息请查看C++ for loop - Tutorialspoint
我正在审查包含以下代码片段的代码,以获取最小的可重现示例。所以这里的代码 运行 是一个初始化数组 done
的迭代,如下所示:
#include <stdio.h>
int i,j;
N=10;
int done[500];
void main() {
done[0]=done[N]=1;
for(i=0;i<N+1;done[i++]=0){
printf("Done val %d iteration %d\n",done[i],i);
}
}
我关心的是我故意初始化了 done[0]=done[1]=1
的值但是当我 运行 初始化循环时,索引 0 和 10 处的值保持不变。我想了解 done[i++]
的语法实际上是如何评估的?
for
循环的递增步骤发生在 循环体执行之后。相当于下面的代码:
i = 0;
while (i < N+1) {
printf("Done val %d iteration %d\n",done[i],i);
done[i++] = 0;
}
如您所见,它在 更改它之前打印 done[i]
的值。所以它打印原始值。
您提供的代码片段一开始就无法正确编译!虽然,我假设您已经知道原因。所以,我简单回答你的问题。
首先,您没有按照预期的方式初始化索引。您改为执行以下操作:
done[0]=done[N]=1;
因此,索引零将设置为一,但索引十设置为一而不是索引一。因此,您应该执行以下操作:
done[0]=done[1]=1;
至于for循环本身,你要明白你的增量变量是最后执行的! for 循环是一个遵循程序顺序的三步过程,其中,
- 增量变量被初始化
- 检查条件语句
- 如果条件语句为true,则执行code body then increment/decrement 增量变量,然后转到第二步。否则退出for循环!
因此,done[i++]=0 在提供的代码块中的 printf() 语句之后得到评估!更多信息请查看C++ for loop - Tutorialspoint