c - 为什么可以在嵌套循环中声明一个 STRUCT?

标签 c cs50

这是一些提供的 (CS50) 代码片段,它在嵌套循环内一遍又一遍地声明相同的 STRUCT“三元组”。为什么这样可以?在我看来,在嵌套循环的范围之上声明 STRUCT“三元组”并在每次迭代中更改值会更有效。

typedef struct
{
    BYTE rgbtBlue;
    BYTE rgbtGreen;
    BYTE rgbtRed;
} __attribute__((__packed__))
RGBTRIPLE;

.

 for (int i = 0, biHeight = abs(bi.biHeight); i < biHeight; i++)
{
    // iterate over pixels in scanline
    for (int j = 0; j < bi.biWidth; j++)
    {
        // temporary storage
        RGBTRIPLE triple;

        // read RGB triple from infile
        fread(&triple, sizeof(RGBTRIPLE), 1, inptr);

        // write RGB triple to outfile
        fwrite(&triple, sizeof(RGBTRIPLE), 1, outptr);
    }

最佳答案

在大多数情况下,此级别的效率是编译器关心的问题。编译器很可能会为每个 RGBTRIPLE 重用相同的堆栈空间! (虽然它不必。)

将 RGBTRIPLE 放在需要它的最小括号对(作用域)内可以防止您意外地、错误地访问该作用域外的变量,此时变量的内容可能无效。

关于c - 为什么可以在嵌套循环中声明一个 STRUCT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938555/

相关文章:

c - malloc 与 C 中的数组

c - 为什么在 C 中使用缓冲输入?

C打印进度条

CS50 PS 1 贪婪

c - 字符串中的数字总和不正确 - cs50,基本 C

c - 如何在For循环中输入两个条件?

c - 如何使用CMake计算C项目的构建时间

c - C 中枚举标志的替换

c - shell 中的历史功能

c - 为什么我收到错误 "use of undeclared identifier?"