【问题标题】:Can we use address of 0 in fread function [duplicate]我们可以在 fread 函数中使用 0 的地址吗?
【发布时间】:2019-10-08 17:00:40
【问题描述】:

我已经完成了 fread 函数的语法,当我查看 fread 的一些示例时,我找到了以下代码。

我知道fread函数的第一个参数是存储对象的内存块地址,第二个参数是每个对象的大小,以字节为单位,第三个参数是对象数,最后一个参数是指向文件的指针。

语法:

size_t fread(void * buffer, size_t size, size_t count, FILE * stream).

代码:

int a_var= 0;
FILE *file;
fread(&(a_var),4,1,file);

我不明白为什么在那里使用a_var。是表示地址为 0 还是地址为 0?

【问题讨论】:

  • 你应该使用sizeof(PixelDataOffset),而不是幻数4,顺便说一句。

标签: c pointers structure


【解决方案1】:
int PixelDataOffset = 0;

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

这个变量有一些地址(假设地址是0x1000)

在声明时分配给该地址的值为“0”。

意味着在地址 0x1000 处存储值“0”。

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

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

暗示变量 PixelDataOffset 的地址(0x1000)被传递。

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

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

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

【讨论】:

    【解决方案2】:

    根据int PixelDataOffset = 0; 的写入位置,PixelDataOffset 将存储在主内存的stackdata 段中。

    该位置的内容将为0

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

    所以要准确回答你的问题:它表示值 0 的地址

    【讨论】:

      【解决方案3】:

      fread 函数需要一个缓冲区地址作为第一个参数。因此,您需要& 运算符来获取变量PixelDataOffset 的地址,以获取文件写入数据的地址。 如果你写

      fread(PixelDataOffset,4,1,fp);
      

      该函数将假定PixelDataOffset 的值是一个地址,并将从地址0 获取数据。 另一种解决方案是

      int Data = 0;
      int* DataPtr = &Data;
      fread(DataPtr,4,1,fp);
      

      【讨论】:

        【解决方案4】:

        使用地址运算符&,您可以获得某物的地址,即您获得指向某物的指针。

        因此,使用&PixelDataOffset,您将获得指向变量PixelDataOffset 的指针。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-12-31
          • 2011-04-05
          • 2010-09-20
          • 1970-01-01
          相关资源
          最近更新 更多