gpt4 book ai didi

c++ - 嵌套 for 循环的外层 for 循环在执行时将被忽略

转载 作者:行者123 更新时间:2023-11-30 21:15:14 24 4
gpt4 key购买 nike

不幸的是,我在 FPGA 协同设计期间陷入了基本的 for 循环。我想迭代像素数组。因此我想使用以下 c 代码:

#define WIDTH 640
#define HEIGHT 480

...

int y = 0;
int x = 0;

for(; y < HEIGHT; y++)
for(; x < WIDTH; x++)
printf("X: %4i Y: %4i Color: %x \n", x, y, (0x3FF & x) << 11 | (0x1FF & y) << 2 | col);

调试终端输出如下:

X:    0  Y:    0 Color: 1 
X: 1 Y: 0 Color: 801
X: 2 Y: 0 Color: 1001
X: 3 Y: 0 Color: 1801
...

我不知道为什么外层循环会被完全忽略而内层循环正常工作?外循环将停留在索引值“0”,这不应该是这种情况。

如果我在 for 循环条件内初始化循环指示,它将按预期工作。

#define WIDTH 640
#define HEIGHT 480

...

int y;
int x;

for(y = 0; y < HEIGHT; y++)
for(x = 0; x < WIDTH; x++)
printf("X: %4i Y: %4i Color: %x \n", x, y, (0x3FF & x) << 11 | (0x1FF & y) << 2 | col);

第一个代码片段不起作用的原因是什么?(使用 gcc 和一些 vivado 集成编译器编译)。

最佳答案

让我们仔细看看循环:

for(; y < HEIGHT; y++)
for(; x < WIDTH; x++)

首先进入外循环,其中y等于0。然后进入内部循环,该循环将从 0 迭代 xWIDTH

然后内循环结束,外循环迭代,y变为1。然后再次进入内部循环,其中 x 等于 WIDTH。因此内循环将不再迭代,让外循环迭代直到 y 达到 HEIGHT

每次重新开始内循环时,您都需要重置x:

for(; y < HEIGHT; y++)
for(x = 0; x < WIDTH; x++)

如果您只是尝试debug,这将是非常显而易见的你的程序。

关于c++ - 嵌套 for 循环的外层 for 循环在执行时将被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53711596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com