我们可以在fread函数中使用0地址吗

时间:2019-05-22 08:52:00

标签: c pointers structure

我通过了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的地址?

4 个答案:

答案 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将存储在主内存的stackdata段中。

该位置的内容将为0

现在&PixelDataOffset将返回存储PixelDataOffset的地址。

因此要精确回答您的问题:它表示值为0的地址

答案 3 :(得分:0)

int PixelDataOffset = 0;

在您的代码中,PixelDataOffset是数据类型为int的变量。

此变量有一个地址(假设地址为0x1000)

在声明时分配给该地址的值是'0'。

存储了地址0x1000中的值“ 0”的

  

它指示值0还是地址0的地址?

传递给fread的参数为&(PixelDataOffset)

传递了变量PixelDataOffset的示例地址(0x1000)。

  

我不明白为什么在那里使用PixelDataOffset。

答案很简单,fread第一个参数是某个地址。

在此示例中,已传递PixelDataOffset的地址