精英盒子 -> 程序设计 -> C++char类型非常坑爹,你懂吗? [打印本页]

laoyis 2012-05-19 23:16

C++char类型非常坑爹,你懂吗?

你是否尝试过使用char而产生莫名奇妙的提示呢?
有时候打印一个char类型的地址却发现打印出一堆乱码。想必这问题有人遇见过  有些人没有。
其实C/C++语法中输出字符串指针,就是输出字符串,也就是说输出一个char*的指针一定是输出一个字符串,而不会输出指针,其它的类型都不会这样。
那么想要输入一个char类型的地址你应该把它转成void*。不管你绝不觉得坑爹 。这个问题确实让很多新手觉得很无语。当然,我也曾吃过暗亏。


jybox 2012-05-19 23:22
char就是一个ascii字符,1个字节大小

而平时作为字符串的char*或char[]类型,是一个指向字符串首字母的指针
这个字符串从指针处开始,到\0处结束...

C++的cout对char*做过单独的优化,输出char*的时候,会输出字符串,而不是这个指针指向的地址

不明白楼主说的“想要输入一个char类型的地址”是什么意思...

说实话呢,我对char*这种C风格的字符串不怎么了解.......也不怎么会用
一直都在用C++风格的string....

laoyis 2012-05-20 18:59
jybox:char就是一个ascii字符,1个字节大小
而平时作为字符串的char*或char[]类型,是一个指向字符串首字母的指针
这个字符串从指针处开始,到\0处结束...
....... (2012-05-19 23:22) 

..入改为出.

jybox 2012-05-20 19:02
laoyis:..入改为出. (2012-05-20 18:59) 

那么想要输出一个char类型的地址你应该把它转成void*

这也不大对劲吧.....你是说用printf还是用cout输出?

rockxh 2012-05-21 20:27
小菜表示不懂,我是来体验速度的

laoyis 2012-06-03 18:26
rockxh:小菜表示不懂,我是来体验速度的 (2012-05-21 20:27) 

哦......

pdl 2012-06-09 12:33
应该可以printf("%d",xxx)

jybox 2012-06-10 10:33
pdl:应该可以printf("%d",xxx) (2012-06-09 12:33) 

楼主说的应该是C++的iostream

幻の上帝 2012-06-14 13:34
jybox:char就是一个ascii字符,1个字节大小
而平时作为字符串的char*或char[]类型,是一个指向字符串首字母的指针
这个字符串从指针处开始,到\0处结束...
....... (2012-05-19 23:22) 

不准确。char必须能够容纳基本执行字符集字符,且不少于8位。ASCII只有7位,肯定不止。而基本执行字符集也不见得一定是ASCII,比如EBCDIC。

jybox 2012-06-14 20:08
幻の上帝:不准确。char必须能够容纳基本执行字符集字符,且不少于8位。ASCII只有7位,肯定不止。而基本执行字符集也不见得一定是ASCII,比如EBCDIC。 (2012-06-14 13:34) 

好吧

liuliul993 2012-10-13 19:52
不懂 好像老师讲过

幻の上帝 2012-11-20 13:03
jybox:char就是一个ascii字符,1个字节大小
而平时作为字符串的char*或char[]类型,是一个指向字符串首字母的指针
这个字符串从指针处开始,到\0处结束...
....... (2012-05-19 23:22) 

噗。谁告诉你就是ASCII的?

幻の上帝 2012-11-20 13:03
跟cout<<成员指针来比算不了什么。

wangxiyu 2012-12-02 11:42
果断printf+scanf碾爆一切,cin,cout有的时候就是会蛋疼,而且在win下还有效率问题。
示例:
#include <cstdio>

int main()
{
  char test[1000]="letshavealook";
  printf("%d\n",test);//%d 会直接输出test的值即字符串开始时的地址
  printf("%s\n",test);//%s 这样会输出test引导的字符串
  return 0;
}

话说 cout不可以指定输出值的类型么?

a415143370 2012-12-02 13:30
wangxiyu:果断printf+scanf碾爆一切,cin,cout有的时候就是会蛋疼,而且在win下还有效率问题。
示例:
#include <cstdio>
int main()
....... (2012-12-02 11:42) 

我只知道C#中的typeof可以

jybox 2012-12-02 16:19
wangxiyu:果断printf+scanf碾爆一切,cin,cout有的时候就是会蛋疼,而且在win下还有效率问题。
示例:
#include <cstdio>
int main()
....... (2012-12-02 11:42) 

cout关键在于是类型安全的、可扩展的,对于基本类型可能麻烦一点,但对对自定义类,也可以用cout输出

另外为啥cout在win下有效率问题?




Powered by phpwind v8.7 Code ©2003-2011 phpwind
Time 0.045574 second(s),query:5 Gzip enabled