C++不能输出字符串的地址,难道我们只可以重归到C语言吗?
我今天试了一下,发现在C++中,如果我们想cout一个字符数组的话,那么它就会沿着这个地址,一直输出输出这个字符串,直到遇到'\0'。例如下面这个例子:
char *c="cadn\0hello";
cout<<c<<endl;
输出的结果是:cadn
如果我们自作聪明的想输出第一个字符的地址,例如这样输出:
cout<<&c[0]<<endl;
不幸的是,这样输出的结果依旧不是我们需要的地址。
但是,如果我们回归到C语言的话,例如用printf的话,如下:
printf("%x\n",&c[0]);
幸福的事情发生了,输出的结果是:
46f020
的确是字符串的首地址,但是,如果我们要输出字符串的地址,难道就这一种方法吗?难道我们就不可以用我们C++上的cout达到我们的效果吗?希望大家可以帮忙,谢谢!
[解决办法]
cout 这类ostream 的格式控制很复杂,
想用就用printf ,一样的。 包含个stdio.h
百度下:
http://wenku.baidu.com/view/27237820482fb4daa58d4b78.html
这篇有介绍
cout << (void*)c << endl; //相当于
[解决办法]
c是靠%s,%x,%p来区分指针表达式&a[0]的输出形式的。
c++没有这个格式控制,只能按一种形式输出,对char*类型的指针值就理解为串输出。所以必须对这个指针表达式做类型转换处理:
[解决办法]