【发布时间】:2019-06-27 11:14:42
【问题描述】:
例如:
int main(int argc, char* argv[]){
char a[4]={0,0,0,1};
int *ia=(int *)a;
printf("%d",ia[0]);
}
它打印 16777216 因为它是二进制的 00000001 00000000 00000000 00000000。为什么会转?
【问题讨论】:
-
您可能想了解endianness。
-
(int *)a的行为已经未定义,尤其将其引用为a可能没有适当对齐,或者至少取消引用会导致严格的别名错误。除此之外,您的目标系统是 little-endian。 -
@Lundin 后跟对齐要求...
标签: c type-conversion