C sizeof运算符和结构
比如说,我们有一个上面定义的结构(或者一般的任何结构,我只是为了举例而写了上面的结构) 那么,使用sizeof运算符有什么更好的方法呢 sizeof(结构s)或sizeof(*obj) 我更喜欢第一个,因为它对我更有意义(清楚地告诉我们我们正在为struct s的对象分配内存) 此外,使用第二个会引入逻辑错误(如通常的“忘记取消引用指针”) 第一个会引起什么问题吗? 我还没有遇到任何问题,只是想知道我所做的是否正确 如果是这样的话,你能提供一个失败的例子吗 那么,使用sizeof运算符有什么更好的方法呢 sizeof(结构s)或sizeof(*obj) 这是偏好的问题 我更喜欢C sizeof运算符和结构,c,sizeof,C,Sizeof,比如说,我们有一个上面定义的结构(或者一般的任何结构,我只是为了举例而写了上面的结构) 那么,使用sizeof运算符有什么更好的方法呢 sizeof(结构s)或sizeof(*obj) 我更喜欢第一个,因为它对我更有意义(清楚地告诉我们我们正在为struct s的对象分配内存) 此外,使用第二个会引入逻辑错误(如通常的“忘记取消引用指针”) 第一个会引起什么问题吗? 我还没有遇到任何问题,只是想知道我所做的是否正确 如果是这样的话,你能提供一个失败的例子吗 那么,使用sizeof运算符有什么更好
sizeof(*obj)
。如果我以后更改obj
(例如,struct s2
)的类型,sizeof(struct s)
将过期
那么,使用sizeof运算符有什么更好的方法呢
sizeof(结构s)或sizeof(*obj)
这是偏好的问题
我更喜欢
sizeof(*obj)
。如果我以后更改obj
(例如,struct s2
)的类型,sizeof(struct s)
将过时。我更喜欢sizeof(struct s)
,尽管结构名称更改,代码也过时了。我的理念是,如果结构发生了变化,最好是为了安全起见而修改使用它的代码。我更喜欢sizeof(struct s)
,尽管结构名称发生了变化,但代码已经过时。我的理念是,如果结构发生变化,为了安全起见,最好修改使用它的代码。也可以使用
sizeof(*obj)
应始终使用,因为如果obj
的类型发生变化,这仍然有效。使用sizeof(struct s)
,您将有一个潜在的bug。任何一个都可以使用
sizeof(*obj)
应始终使用,因为如果obj
的类型发生变化,这仍然有效。使用sizeof(struct s)
,您将有一个潜在的bug。我更喜欢sizeof(*obj)
,因为当与变量(而不是类型)一起使用时,括号是可选的(因为sizeof
是一个运算符,而不是函数),我认为sizeof*obj
看起来相当不错。我更喜欢sizeof(*obj)
,因为,当与变量(而不是类型)一起使用时,括号是可选的(因为sizeof
是一个运算符,而不是一个函数),我认为sizeof*obj
看起来相当不错。-1:sizeof(*obj)
应该总是首选。如果obj
的类型发生变化,您将有一个带有sizeof(struct s)
-1:sizeof(*obj)
的静默bug应该始终是首选。如果obj
的类型发生变化,您将有一个带有sizeof(struct s)
的静默bug。我不知道为什么这被认为是“非建设性的”。这是一个很好的问题。我不知道为什么这被认为是“没有建设性的”。这是一个好问题。可能是重复的是的,我发现我的方法有缺陷。更改结构名称至少会抛出错误,但如果不注意,更改类型将是灾难性的。我想从现在起我会坚持使用这些物品。谢谢。是的,我发现我的方法有缺陷。更改结构名称至少会抛出错误,但如果不注意,更改类型将是灾难性的。我想从现在起我会坚持使用这些物品。非常感谢。
struct s
{
int i;
char * c;
} *obj;
obj = malloc(sizeof(struct s));