c语言问题

临下课老师讲的,我就记了个大概,我不知道哪里错了,输出应该是结果是3231(好像是,有个110 001 110 010)
跪求大神详解
可以的话解释一下为何输出3231

首先a是一个char数组,char占1个字节。字符以ASCII码的形式保存到内存中 1的ASCII 码为49 2为50 转化成二进制 分别是‭00110001‬ ,‭00110010‬。数组的内存是连续的。所以内存中的情况是 ‭00110010‬‭00110001‬。 p是short指针。short占2个字节。p=(short)a是将a数组中的内容强转成short ,a数组实际hk5个字节(上面只分析了前两个字节)。所以p指向的是a数组的首地址,取数据时由于是short指针就只取两个字节。2的ASCII码占是高地址,所以取得内容是00110010‬‭00110001,转成16进制就是3231追问

原来如此,问下,我的程序拿错了

追答

首先 p=(short *)a; a是数组名 同时也是数组的头指针 所以是不能转成short的应该是转成 short指针。其次打印"%d"是10进制所以打印出来是12849 16进制就是3231.所以打印改为%x

追问

谢谢,请收下我的膝盖

问一下,c语言是不是大多数汇编语言基础

温馨提示:答案为网友推荐,仅供参考
相似回答