数组存放的是指针,为什么输出数组元素却不是指针?解决方案
数组存放的是指针,为什么输出数组元素却不是指针??
#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。这样方便程序简化输出字符串
比如下面语句:
#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;