sizeof运算符和结构

时间:2011-08-17 09:08:39

标签: c sizeof

struct s  
{  
    int i;  
    char * c;  
} *obj;
obj = malloc(sizeof(struct s));

比如说我们有一个如上定义的结构(或者一般的任何结构,我只是为了举例而写了上面的结构)。

然后,使用sizeof运算符

时更好

sizeof(struct s)或sizeof(* obj)?

我更喜欢第一个,因为它对我更有意义(清楚地告诉我们,我们为结构对象分配内存)

另外,使用第二个可能会引入逻辑错误(就像通常'忘记取消引用指针')

第一个会导致任何问题吗? 我还没有遇到过问题,但只是想知道我所做的事情是否合适。

如果是这样,你能否提供一个失败的例子?

3 个答案:

答案 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),尽管结构名称更改但代码已过期。我的理念是,如果结构发生变化,最好是为了安全起见而使用它的代码。