代码之家  ›  专栏  ›  技术社区  ›  sruly

理解这段代码有困难,如果不使用i和j,它如何迭代for循环?

  •  -1
  • sruly  · 技术社区  · 7 年前

    我不明白这段代码是如何遍历图像的像素的,如果在读取图像时代码不使用int I或j?新的编码和更新的文件处理,所以这就是为什么我如此无知。非常感谢。

    // iterate over infile's scanlines
        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);
    
    
            }
            // skip over padding, if any
            fseek(inptr, padding, SEEK_CUR);
    
            // then add it back (to demonstrate how)
            for (int k = 0; k < padding; k++)
            {
                fputc(0x00, outptr);
            }
    
        }
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   zetavolt    7 年前

    功能如下 fread

    由于各种原因(其中一些是历史原因),这些函数的结构采用了“文件指针”或 FILE .

    哪里 在文件中,它指向。当你打电话的时候 具有特定的 size / nmemb 内部 定期的加薪 文件 没有你的帮助。

    fseek

    就像下面的函数实际上 i 为了增加它的价值,它只有关于 num main 和内部逻辑 increment 运行。

    void increment(int *num) {
        *num = *num + 1;
    }
    
    int main() {
        int num = 0;
        for (int i = 0; i < 100; i++) {
            increment(&num);
        }
        printf("%d\n", num); // this prints 100
    }
    

    这种处理文件输入/输出的方式是文件I/O通用模型的一部分,它在基于Unix的操作系统(如Mac OSX和Linux)的理念中起着绝对关键的作用,在后来改进这些系统(如 Plan9

    如果你想成为一名熟练的程序员,关键是你要通过阅读以下书籍来理解这些API的概念及其背后的推理 "The Linux Programming Interface" , "The Art of Unix Programming" "Advanced Programming in the Unix Environment"

        2
  •  0
  •   Jonathan Olson    7 年前

    内部循环确实使用 j

    外部回路具有 i 一、 但是条件仍然在每次迭代中发生变化,因此它仍然应该退出。该用例通常通过while循环完成。