首页 > 解决方案 > 为什么这段代码会产生输出 513?

问题描述

我在我的c语言期末考试中看到了这个问题,输出是513,我不知道为什么

#include <stdio.h>
int main(void){
    char a[4] = {1,2,3,4};
    print("%d" , *(short*)a);
}

标签: cpointers

解决方案


您的字节数组是(十六进制):

[ 0x01, 0x02, 0x03, 0x04 ]

如果您不将数组的开头视为字节数组,而是将其视为 a 的开头short,那么您的 short 具有 value 0x01 0x02,并且因为您的处理器是"Little Endian",它会从人类读取它的方式向后读取。我们将它作为0x0201,这与513(Decimal)


推荐阅读