c语言里面:
int a[]={1,2,3,4};
cout<<a<<endl;
char b[]="abcd";
cout<<b<<endl;
为什么结果会不同,原理在哪
字符数组是可以用这种方式输出的,因为数组名即代表首地址,数组是一块连续的内存空间,所以能直接输出.如果是其他类型的数组则输出的是一个地址。
ostream的<<操作符 专门重载了char*的版本。因为char*很特殊,C里用它来表示字符串。
这就是“多态”,相同的调用方式,具体到不同的类型,有不同的结果。再比如,你可以用同样的代码将数据送到流中,但是文件流是写文件,网络流是收发数据,而作为开发者你不用关心。
在谭浩强的书里面说到过,数组名代表的是数组的首地址,int a[],char b[]的a,b指的都是存储a数组与字符串b数组的地址。a与b就是指针。
但是字符串数组有一个特性,就是你用cout输出函数进行输出时只需指明其首地址即可。
如果LZ学过C想想printf("%s",b);与prrintf("%d",&a[i])就可以了。
之所以能用cout输出,是因为这个类型重载了operator <<。所以利用cout输出一个类的行为就由这个重载函数决定了