C中sizeof(struct structname)和sizeof(object)之间的区别

时间:2011-09-22 22:51:26

标签: c sizeof

是否存在sizeof(struct structure_name)sizeof(object)之间可能存在差异的情况,其中object在C中的类型为struct structure_name

2 个答案:

答案 0 :(得分:7)

sizeof(type)sizeof(o)之间没有任何区别,声明类型otype

如果对象的声明类型不能真正代表对象,则可能存在差异。例如

char arrayValue[100];
sizeof(arrayValue);  // 100 on most systems
char* pointerValue = arrayValue;
sizeof(pointerValue);  // 4 on most 32 bit systems

出现这种差异是因为sizeof是C语言中的编译时构造。因此,没有运行时分析,编译器会查看静态声明的类型。

答案 1 :(得分:3)

没有; sizeof(type)sizeof(object-of-type)始终产生相同的结果。

嗯,有一个警告,使用VLA(可变长度数组),sizeof()可能是运行时操作,但除此之外,它们是固定的。并且您可以提出一个案例,即使使用VLA,sizeof(variably-qualified-type)sizeof(object-of-same-variably-qualified-type)的结果也会产生相同的结果,因此VLA实际上并不是例外。