CS50第四周BottomUp作业疑问:BITMAPFILEHEADER与&bf解析
CS50 BottomUp作业代码疑问解答
结论:&bf不是缓冲区
先拆解你贴的这段代码:
// Read infile's BITMAPFILEHEADER BITMAPFILEHEADER bf; fread(&bf, sizeof(BITMAPFILEHEADER), 1, inptr);
BITMAPFILEHEADER bf;:这行是在计算机内存里申请了一块刚好能容纳BMP文件头数据的小内存块,就像一个定制的小抽屉,专门用来装BMP文件的头部信息(比如文件大小、像素数据起始位置这些),这个小抽屉的名字叫bf。fread(&bf, ...)里的&bf,是这个小抽屉在内存里的具体位置(地址)。fread函数需要知道把从文件里读出来的文件头数据放到哪里,所以你把这个地址传给它,它就会把数据准确放进bf这个小抽屉里。
通俗解释缓冲区的概念
缓冲区就是一块专门用来临时存放数据的内存区域,可以理解成一个“中转货箱”。比如你要把硬盘里的大量像素数据读到内存处理,总不能读一个像素就处理一个,效率太低。这时候就会申请一块足够大的内存,一次性把一行或者几行像素数据都读到这块内存里(也就是缓冲区),再慢慢处理,处理完再写到新文件里——这样能减少硬盘的读写次数,提升程序效率。
回到你的作业里,处理BMP翻转时,用来临时存放像素行数据的那块内存才是缓冲区,而bf只是用来存文件头的一小块内存,&bf只是它的地址,和缓冲区不是一回事。
内容的提问来源于stack exchange,提问作者ASZ
相关产品推荐
相关产品推荐

