我通过了fread
函数,其语法类似于当我浏览fread
的一些示例时,发现下面的代码。
我了解到,在fread
函数中,第一个参数是存储对象的内存块的地址,第二个参数是每个对象的大小(以字节为单位),第三个参数是没有对象,最后一个参数是指向该对象的指针文件。
语法:
size_t fread(void * buffer, size_t size, size_t count, FILE * stream).
代码:
int PixelDataOffset = 0;
FILE *fp;
fread(&(PixelDataOffset),4,1,fp);
我不明白为什么在这里使用PixelDataOffset
。它指示值0还是地址0的地址?
答案 0 :(得分:2)
使用地址操作符&
,您将获得某物的地址,即,您获得了指向某物的指针。
因此,使用&PixelDataOffset
,您将获得一个指向变量PixelDataOffset
的指针。
答案 1 :(得分:0)
fread函数需要缓冲区的地址作为第一个参数。因此,您需要&
运算符来获取变量PixelDataOffset
的地址,以获取文件写入数据的地址。
如果你写
fread(PixelDataOffset,4,1,fp);
该函数将假设PixelDataOffset
的值是一个地址,并将从地址0中获取数据。
另一个解决方案是
int Data = 0;
int* DataPtr = &Data;
fread(DataPtr,4,1,fp);
答案 2 :(得分:0)
根据int PixelDataOffset = 0;
的写入位置,PixelDataOffset
将存储在主内存的stack
或data
段中。
该位置的内容将为0
。
现在&PixelDataOffset
将返回存储PixelDataOffset
的地址。
因此要精确回答您的问题:它表示值为0的地址。
答案 3 :(得分:0)
int PixelDataOffset = 0;
在您的代码中,PixelDataOffset是数据类型为int的变量。
此变量有一个地址(假设地址为0x1000)
在声明时分配给该地址的值是'0'。
存储了地址0x1000中的值“ 0”的
。它指示值0还是地址0的地址?
传递给fread的参数为&(PixelDataOffset)
传递了变量PixelDataOffset的示例地址(0x1000)。
我不明白为什么在那里使用PixelDataOffset。
答案很简单,fread第一个参数是某个地址。
在此示例中,已传递PixelDataOffset的地址