鉴于以下代码,它在C中是合法的吗? (C89,C99等等?)
DATA_STRUCT *ptr;
ptr = malloc(sizeof(*ptr) + 400);
memset(ptr, 0, sizeof(*ptr)); // clearing only the structure itself (not the 400 additional bytes).
我知道在运行时评估VLA和sizeof,但是对于所有其他情况,它是否总是在编译时?
编辑: 从答案中我看到这可能是由以下原因造成的:
1似乎不太可能,所以我倾向于2。 无论哪种方式,都需要进一步调查。
答案 0 :(得分:0)
是的,您的代码是合法的。但是,*ptr
周围的括号不是必需的。
答案 1 :(得分:0)
是的,它是有效的。 sizeof
运算符不会计算其操作数。