Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 理解这段代码有困难,如果i和j不是';没有被使用?_C_Cs50 - Fatal编程技术网

C 理解这段代码有困难,如果i和j不是';没有被使用?

C 理解这段代码有困难,如果i和j不是';没有被使用?,c,cs50,C,Cs50,我不明白这段代码是如何遍历图像的像素的,如果在读取图像时代码没有使用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 =

我不明白这段代码是如何遍历图像的像素的,如果在读取图像时代码没有使用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);
        }

    }
//迭代infle的扫描线
对于(inti=0,biHeight=abs(bi.biHeight);i
内部循环确实以常规方式使用
j
,尽管它不是在循环内部读取的。它仍然会被迭代并在条件中使用

带有
i
的外部循环实际上并不使用
i
,但条件在每次迭代时仍然会发生变化,因此它仍然应该退出。该用例通常通过while循环完成。

等函数用于处理文件

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

文件
包含有关它当前指向的文件、长度以及关键的位置的信息。当您使用特定的
size
/
nmemb
(这意味着“成员数”)组合调用
fread
时,它将在内部递增
文件
,而无需您的帮助

事实上,正如您的程序稍后所示,访问文件任意区域的唯一方法是查找()到它们

就像下面这个函数实际上没有使用
i
来增加它的值一样,它只是在
main
的堆栈框架内部有关于
num
的信息,在
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
}
void增量(int*num){
*num=*num+1;
}
int main(){
int num=0;
对于(int i=0;i<100;i++){
增量(&num);
}
printf(“%d\n”,num);//这将打印100
}

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


如果你想成为一名熟练的程序员,关键是要通过阅读、等书籍来理解这些API的概念及其背后的推理。

但它确实使用了
i
j
k
:循环中的contidion。你知道如何用
for
循环迭代数组吗?使用调试器一步一步地检查代码,你就会确切地了解
i,j,k
是如何被使用的。他说的是使用具有内部搜索信息的文件i/O API。@EugeneSh。是的,您可以执行类似于数组[i]的操作,但我看不到在初始化之后使用i或j。我知道i和j用于确保操作执行了多少次。我不明白的是程序是如何在图片中迭代的,如果I和j在确保它发生一定次数之外没有被使用。比如,如果图片是一个3d数组,我会在代码中看到类似图片[I][j]的东西;非常有见地的评论,非常感谢!我会进一步调查的。