A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liu01230 中级黑马   /  2015-5-13 18:23  /  1689 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

c语言中输入字符串可以用char *来输入。那么下面的代码
  1. char * c1 = "你好,世界";
  2.     char * c2 = "hello world";
复制代码
这里c1和c2都是指针,那么这就代表着他们都是指向了char类型的变量。但是汉字在是占据三个字节的,而char类型的数据只占据一个字节,那么c1指针是怎么把汉字输出的呢?

15 个回复

倒序浏览
有没有会的说一下
回复 使用道具 举报
c1 c2这两个变量可以理解为 是char *类型的变量 即为字符串指针,是指向字符串的指针 而非指向字符. 等价于 char c1[] = "......"。       所以可以输出汉字。
回复 使用道具 举报
这样理解:
汉字在内存中也是二进制来存放的。只是占了3个字节,汉字也是用ASCII码值来表示的。
这么说你应该懂了
XCODE中汉字占3字节,即这个汉字的二进制值存放到3个连续的字节中的。
c1 指向的是字符串的首地址,输出时遇到了'\0'则结束。
回复 使用道具 举报
本帖最后由 丶浩浩丶 于 2015-5-14 20:44 编辑

你可以这么认为,这个时候的char只是一个声明,告诉编译器,(嗨,编译器,我一会要存的东西是个char类型的,你就给我把那些东西存到char类型的存储空间,别瞎放啊!).

(个人观点,每个人理解方式和学习方法不同,酌情接受)

变量为什么要区分类型呢,就是因为要更好的利用内存,不同类型放到不同存储空间.

还有楼上说的不对,不是xcde让汉字占3个字节,而是C语言里面汉字是占3个字节,OC里面汉字就只是占一个字节.
回复 使用道具 举报
本帖最后由 丶浩浩丶 于 2015-5-14 20:44 编辑
unnamed 发表于 2015-5-14 17:16
这样理解:
汉字在内存中也是二进制来存放的。只是占了3个字节,汉字也是用ASCII码值来表示的。
这么说你应 ...

不是xcode让汉字占3个字节,而是C语言里面汉字是占3个字节,OC里面汉字就只是占一个字节.
回复 使用道具 举报
gamyc 中级黑马 2015-5-14 23:50:59
7#
丶浩浩丶 发表于 2015-5-14 20:43
不是xcode让汉字占3个字节,而是C语言里面汉字是占3个字节,OC里面汉字就只是占一个字节. ...

学习了, 原来是这么回事啊,不过为什么oc中就可以用一个字节来存储一个汉字呢
回复 使用道具 举报
gamyc 发表于 2015-5-14 23:50
学习了, 原来是这么回事啊,不过为什么oc中就可以用一个字节来存储一个汉字呢 ...

{:2_33:}这个问题....不应该问我
回复 使用道具 举报
看看大家怎么说的,学习一下
回复 使用道具 举报
丶浩浩丶 发表于 2015-5-14 20:42
你可以这么认为,这个时候的char只是一个声明,告诉编译器,(嗨,编译器,我一会要存的东西是个char类型的,你就 ...

学习了,原来是这样的,谢谢了
回复 使用道具 举报
unnamed 发表于 2015-5-14 17:16
这样理解:
汉字在内存中也是二进制来存放的。只是占了3个字节,汉字也是用ASCII码值来表示的。
这么说你应 ...

谢谢了啊。知道怎么回事了
回复 使用道具 举报
mony 中级黑马 2015-5-16 15:02:20
12#
我觉得你想知道里面汉字怎么存放,可以把char数组,一个字符一个字符的打印出来,看看汉字是不是能正常打印
回复 使用道具 举报
mack,学习
回复 使用道具 举报
学的时候没感觉有什么,你这么一说还真很难回答。
回复 使用道具 举报
mony 发表于 2015-5-16 15:02
我觉得你想知道里面汉字怎么存放,可以把char数组,一个字符一个字符的打印出来,看看汉字是不是能正常打印 ...

恩。我试一下看看
回复 使用道具 举报
定义一个字符串数组指针,其实它指向的是字符串数组的首地址,输出的话就是从收地址一直取,char类型是占据一个字节的内存,汉字(所有东西)在内存中的存储最后都是转换成0和1来存储的,不知道我说的你能理解不,另外利用指针来定义字符串数组的时候,字符串其实是定义成了一个常量字符串,里面的字符是不可以修改的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马