谁来解释这个小程序……

z1058017535 2011-11-18 12:02:09
#include<stdio.h>
int main(void)
{
char *s;
int n[]={181*256+196};
s=(char*)n;
puts(s);
return 0;
}
结果为什么是一个汉字“牡”,难道181.196与“牡”的机内码有关吗
...全文
130 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sony_zhang 2011-11-18
  • 打赏
  • 举报
回复
强制类型转换?整型指针转字符指针?
yulinlang 2011-11-18
  • 打赏
  • 举报
回复
181*256+196=46532,转换位16进制位b5c4,intel处理器小段序存储位c4b5,正是汉字“牡”的GBK内码。
z1058017535 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zz2583747196 的回复:]

明白了各位
谢了
[/Quote]
……
zz2583747196 2011-11-18
  • 打赏
  • 举报
回复
明白了各位
谢了
yel617 2011-11-18
  • 打赏
  • 举报
回复
学习了
可以这样打印汉字啊
GBK编码
小程 2011-11-18
  • 打赏
  • 举报
回复
int n[]={181*256+196};
定义了一个int型数组,数组的大小为1,与下面语句类似
int n[1] = {46532};

s=(char*)n;
让s指向n所占用内存处。
puts(s);
将把该内存处的数据作为字符串打印出来。

46532(0xB5C4)是'牡'的GBK编码。
n所占内存后面应是0,刚好作为字符串结束标志,否则应打出更多的汉字或乱码。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧