struct s
{
int i;
char * c;
} *obj;
obj = malloc(sizeof(struct s));
比如说我们有一个如上定义的结构(或者一般的任何结构,我只是为了举例而写了上面的结构)。
然后,使用sizeof运算符
时更好sizeof(struct s)或sizeof(* obj)?
我更喜欢第一个,因为它对我更有意义(清楚地告诉我们,我们为结构对象分配内存)
另外,使用第二个可能会引入逻辑错误(就像通常'忘记取消引用指针')
第一个会导致任何问题吗? 我还没有遇到过问题,但只是想知道我所做的事情是否合适。
如果是这样,你能否提供一个失败的例子?
答案 0 :(得分:7)
然后,使用sizeof运算符
时更好sizeof(struct s)或sizeof(* obj)?
这是一个偏好的问题。
我更喜欢sizeof(*obj)
。如果我稍后更改obj
的类型(例如,struct s2
),sizeof(struct s)
将会过时。
答案 1 :(得分:3)
可以使用。
sizeof(*obj)
应始终使用,因为如果obj
的类型发生变化,这仍然有效。使用sizeof(struct s)
,您将遇到潜在的错误。
答案 2 :(得分:-2)
我更喜欢sizeof(struct s)
,尽管结构名称更改但代码已过期。我的理念是,如果结构发生变化,最好是为了安全起见而使用它的代码。