首先a是一个char数组,char占1个字节。字符以ASCII码的形式保存到内存中 1的ASCII 码为49 2为50 转化成二进制 分别是00110001 ,00110010。数组的内存是连续的。所以内存中的情况是 0011001000110001。 p是short指针。short占2个字节。p=(short)a是将a数组中的内容强转成short ,a数组实际hk5个字节(上面只分析了前两个字节)。所以p指向的是a数组的首地址,取数据时由于是short指针就只取两个字节。2的ASCII码占是高地址,所以取得内容是0011001000110001,转成16进制就是3231
追问原来如此,问下,我的程序拿错了
追答首先 p=(short *)a; a是数组名 同时也是数组的头指针 所以是不能转成short的应该是转成 short指针。其次打印"%d"是10进制所以打印出来是12849 16进制就是3231.所以打印改为%x
追问谢谢,请收下我的膝盖
问一下,c语言是不是大多数汇编语言基础