首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数组存放的是指针,为什么输出数组元素却不是指针?解决方案

2012-04-25 
数组存放的是指针,为什么输出数组元素却不是指针??#include iostreamusing namespace stdvoid main(){c

数组存放的是指针,为什么输出数组元素却不是指针??
#include <iostream> 
using namespace std; 
void main() 

char *a[]={"hello","the","world"};
cout<<"a :"<<a<<endl;
cout<<"a[0] :"<<a[0]<<endl;
cout<<"a[1] :"<<a[1]<<endl;
cout<<"a[2] :"<<a[2]<<endl;
}
我定义了一个存放char 指针的数组,可是输出数组元素为什么不是个地址,而是"hello","the","world"呢?我哪里理解错了??char (*a)[]是定义个指针a指向char数组,不对吗?

[解决办法]
跟cout.operator<<(char *)实现有关
[解决办法]
重载了char*
[解决办法]
char *a[3]={.......};
a[0]等价于*a;
a[1]等价于*(a+1);
[解决办法]
想要准确输出想要的值类型就用printf
cout对象的"<<"号是人家自己重载的东西,你直接在<<后面写变量,它只会根据变量类型,
来调用对应的重载函数。

[解决办法]
看重载运算符对操作类型的如何解释了,库的实现者就是这么做的,因为它满足了一般的需求。
也和c的printf兼容吧。
printf("%s",char *);
[解决办法]
cout对char型指针有特殊照顾:如果給它的是一个char型指针,会不断输出地址所指向的内容,直到遇到NULL。这样方便程序简化输出字符串
比如下面语句:

C/C++ code
char c = 'a';char* p = &c;cout << p << endl; 

热点排行