C中的恐惧指针
fread pointer in C
我声明了一个非指针变量用作我在 C 中的 fread
函数的缓冲区。fread
指定缓冲区应该是一个指针,我使用了 &
符号指向我的变量 buffer
的地址(如果我的逻辑是正确的)。我想知道,使用 &
指向普通变量的地址是否是个好主意。我不确定这种做法是否是我应该避免的 'bad' 事情/习惯。非常感谢。
int16_t buffer;
fwrite(&buffer, (size_t) sizeof(int16_t), (size_t) 1, output);
if it's a good idea to use & to point to the address of a normal variable.
是 - 在 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();
我声明了一个非指针变量用作我在 C 中的 fread
函数的缓冲区。fread
指定缓冲区应该是一个指针,我使用了 &
符号指向我的变量 buffer
的地址(如果我的逻辑是正确的)。我想知道,使用 &
指向普通变量的地址是否是个好主意。我不确定这种做法是否是我应该避免的 'bad' 事情/习惯。非常感谢。
int16_t buffer;
fwrite(&buffer, (size_t) sizeof(int16_t), (size_t) 1, output);
if it's a good idea to use & to point to the address of a normal variable.
是 - 在 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();