每当我想使用C读或写二进制文件时,我都会使用fread()fwrite()函数。它们需要读取或写入的数据字节作为参数,因此我使用sizeof()函数。现在的问题是:
书上说我应该声明这样一个函数:

fread(&variable,sizeof(TYPE_OF_VAR),quantity,file);

我使用了以下语句,这些语句大部分时间都有效,但并不总是有效:
fread(&variable,sizeof(VARIABLE),quantity,file);

为什么有时有用,但有时却不行?
是否取决于变量的类型(int、char等)?
这取决于我使用的数据的数量吗?

最佳答案

需要记住的是sizeof是基于编译器在编译时对类型的了解(暂时忽略VLA)。如果给它一个变量,它将使用该变量的类型。
所以,我唯一能想到的是指针在哪里不起作用。
基本上可以归结为:

int x[5];
int *y = &x[0];
int *p = malloc(sizeof(int) * 5);
sizeof(x); // == sizeof(int) * 5
sizeof(y); // == sizeof(int *)
sizeof(p); // == sizeof(int *)

这在处理函数时会变得棘手,因为数组在传递给函数时会衰减为指针。还要注意的是,这三个都是完全相同的:
int func(int *p);
int func(int p[5]);
int func(int p[]);

在所有的3中,p是指针,而不是数组。

关于c - sizeof(var)是否始终在C中工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11820621/

10-15 02:12