2 u010417178 u010417178 于 2016.04.04 18:28 提问

char a[]和int a[] cout<<a不同

c语言里面:
int a[]={1,2,3,4};
cout<<a<<endl;

char b[]="abcd";
cout<<b<<endl;

为什么结果会不同,原理在哪

4个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.04 19:51

字符数组是可以用这种方式输出的,因为数组名即代表首地址,数组是一块连续的内存空间,所以能直接输出.如果是其他类型的数组则输出的是一个地址。
ostream的<<操作符 专门重载了char*的版本。因为char*很特殊,C里用它来表示字符串。

caozhy
caozhy   Ds   Rxr 2016.04.04 23:18

这就是“多态”,相同的调用方式,具体到不同的类型,有不同的结果。再比如,你可以用同样的代码将数据送到流中,但是文件流是写文件,网络流是收发数据,而作为开发者你不用关心。

HOLY3KILL
HOLY3KILL   2016.04.07 18:31

在谭浩强的书里面说到过,数组名代表的是数组的首地址,int a[],char b[]的a,b指的都是存储a数组与字符串b数组的地址。a与b就是指针。
但是字符串数组有一个特性,就是你用cout输出函数进行输出时只需指明其首地址即可。
如果LZ学过C想想printf("%s",b);与prrintf("%d",&a[i])就可以了。

hijack00
hijack00   Rxr 2016.08.26 22:43

之所以能用cout输出,是因为这个类型重载了operator <<。所以利用cout输出一个类的行为就由这个重载函数决定了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!