【问题标题】:fread pointer in CC中的fread指针
【发布时间】:2021-08-26 20:34:03
【问题描述】:

我在 C 中声明了一个非指针变量用作我的 fread 函数的缓冲区。fread 指定缓冲区应该是一个指针,我使用 & 符号指向我的变量的地址buffer(如果我的逻辑是正确的)。我想知道,使用& 指向普通变量的地址是否是个好主意。我不确定这种做法是否是我应该避免的“坏”事情/习惯。非常感谢。

int16_t buffer;

fwrite(&buffer, (size_t) sizeof(int16_t), (size_t) 1, output);

【问题讨论】:

  • "我想知道,使用 & 指向普通变量的地址是否是个好主意"。是的,没关系。如果不在变量上,& 还能用来做什么?
  • 我还是从 C 开始,特别是指针。我在想也许 & (转到地址)和 * (显示地址内的内容)是为指针严格保留的,在普通变量中使用可能会在我没有注意到的情况下出错。
  • & 的全部意义在于获取变量的地址,以便将其放入指针中。
  • 我不会认为& 指向地址。 &foofoo 的地址。如果你想把一个地址想成是“指向”某物,那并不过分,但&只是一个获取地址的操作符。
  • 超级清晰,非常感谢

标签: c pointers buffer fread


【解决方案1】:

如果使用 & 指向一个普通变量的地址是个好主意。

是的 - 当文件以 binary 模式打开时,这是一个好主意和 C 中的常见用法。

最好也添加错误检查、对象大小(不是类型)并删除不必要的强制转换。

int16_t buffer;
...
size_t wcount = fwrite(&buffer, sizeof buffer, 1, output);
if (wcount != 1) Handle_Error();

或者使用数组。

#define N 42
int16_t buf[N];
... 
//  Here, array `buf` converts to the address of the first element.
//                     vvv
size_t wcount = fwrite(buf, sizeof buf[0], N, output);
if (wcount != N) Handle_Error();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 2012-05-28
    • 2021-08-14
    • 1970-01-01
    • 2011-04-24
    • 2011-05-19
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多