我很好奇这段代码的含义:
我的问题是:为什么a != b?
int a = 'ftyp'; // a == 1718909296
int b = *((int*)"ftyp"); // b == 1887007846
我的问题是:为什么a != b?
int a = 'ftyp'; // a == 1718909296
int b = *((int*)"ftyp"); // b == 1887007846
int a = 'ftyp'; // a == 1718909296
将a
设置为多字符常量,其具有实现定义的值。标准未定义a
的值。有关更多详细信息,请参见C或C++中的单引号与双引号。
int b = *((int*)"ftyp"); // b == 1887007846
在it技术方面,由于违反了严格别名规则,会导致未定义的行为。
期望a == b
是不合理的。
int *
访问字符串字面值的值。 - R Sahuchar*
转换为 int*
并使用 int b = *((int*)"ftyp")
进行反引用。因此,在允许该指针转换的系统上,由于对齐违规,仍可能导致 *(int_pointer)
失败。 - chux - Reinstate Monica
a
是0x66747970
,而b
是0x70797466
。 - Cornstalks