是否存在sizeof(struct structure_name)
和sizeof(object)
之间可能存在差异的情况,其中object
在C中的类型为struct structure_name
?
答案 0 :(得分:7)
sizeof(type)
与sizeof(o)
之间没有任何区别,声明类型o
为type
。
如果对象的声明类型不能真正代表对象,则可能存在差异。例如
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实际上并不是例外。