C 理解这段代码有困难,如果i和j不是';没有被使用?
我不明白这段代码是如何遍历图像的像素的,如果在读取图像时代码没有使用int 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 =
// 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]的东西;非常有见地的评论,非常感谢!我会进一步调查的。