2 u011367236 u011367236 于 2016.09.07 22:52 提问

C++ 数组和指针疑惑,在C++中为什么cout<<数组名;输出的是整个数组?

如图所示,代码和GCC编译结果
请问为什么&str[0]和str输出的是整个字符数组而不是字符数组首地址?
请问数组名str应该即是字符数组首地址,为什么需要加上取址符&才能输出首地址值?
使用C语言编写输出的结果和自己理解的一样,为什么用c++输出结果和我的理解完全不同?求大神答疑~

4个回答

caozhy
caozhy   Ds   Rxr 2016.09.07 22:53
已采纳

cout对于char[]有重载,这是一个特例,只有字符串数组会输出整个数组,如果是int数组或者别的数组,则不会。

aaaeefv
aaaeefv   2016.09.07 23:16

当cout遇到字符的首地址时,会输出对应的字符,并且会不停的输出下一个字符,直到遇到NULL,才会停止

caozhy
caozhy   Ds   Rxr 2016.09.07 22:53

cout << (int)&str[0]
可以输出地址。

u011367236
u011367236 error: cast from ‘char*’ to ‘int’ loses precision [-fpermissive] std::cout<<"&str[0]="<<(int)&str[0]<<std::endl;
接近 2 年之前 回复
hijack00
hijack00   Rxr 2016.09.08 13:01

char []重载了operator <<

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
"cout<<char数组名/数组指针"跟"cout<<int数组/数组指针"的差别
一、结论1、数组名跟指针很相似。从内存上看它们就是一样的东西,都是保存了某一个地址。2、输出int数组名和输出指向int数组的指针结果是一样的。都是地址,可以看做是一个变量,这个变量里保存了的值就是地址。3、输出char数组名和输出指向char数组的指针结果也是一样的。都是字符串,为什么是字符串而不是一个地址值呢?这个是编译器把它们区分开了。编译器对指向int数组的指针和指向char数组的指针作了区分,调用了不同的函数去输出。二、分析数组名跟指针的关系,不必多说。下面主要对结论3,即是:int数组跟char
cout<<char数组名/数组指针"跟"cout<<int数组名/数组指针"的差别
原帖地址:http://topic.csdn.net/u/20100625/21/a4a9576e-948b-4518-8e34-6477265de74d.html 问题: # include "iostream.h" int main() { int a[]={1,2,3,4,5}; char b[]={'h','e','l','l','o','\0'}; cout cout
c语言——数组名和&amp;+数组名的区别
在学习c语言的过程中我们可以发现一个一维数组的的数组名往往具有两层含义:   一. 作为数组名代表整个数组   二. 作为指针代表数组的首元素地址(因此很容易把数组和指针混为一谈)。 当数组名作为首元素的地址时:int main() { int arr[5]; int*p = arr; printf(&quot;arr=%d\n&quot;,arr); printf(&quot;arr+1=%d\n&quot;,arr+1
直接输出数组名的问题
int ab[10]={1,2,3,6,7}; char a[6]={'h','a','p','p','y','\0'}; char ac[]="happy"; cout<<ac<<endl; cout<<ac<<endl; cout<<ab<<endl; 字符数组是可以用这种方式输出的,因为数组名即代表首地址,数组是一块连续的内存空间,所以能直接输出.如果是其他类型的数组则输出的是一个地址.
C语言中数组名和指针的区别 及 sizeof用法
#i nclude int main(int argc, char* argv[]) { char str[10]; char *pStr = str;  cout  实际情况是:第6行输出10,第7行输出4; 先给出三个结论:   (1)数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;   (2)数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;   (3)指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4)
数组名是指针,为什么sizeof(数组名)还是数组的大小
数组名与指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于是乎,很多程序设计者就被搞糊涂了。而许多的大学老师,他们在C语言的教学过程中也错误得给学生讲解:"数组名就是指针"。这种误解的根源在于国内某著名的C程序设计教程(出版量最多的那本破书)。 数组名的内涵在于其指代实体是一种数据结构,这种数据结构就是数组;数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量;指向数
c语言中数组名与指针的区别与联系
今天在工作中定义数组的时候习惯性的使用char型指针后直接等于字符串,但在编译通过后运行的时候产生了段错误,因为着急就(整个函数代码还是比较多的)没仔细看代码,只是抱着试试看的心态,将定义换成了数组后等于字符串的形式,居然没有在出现段错误,感到很奇怪(刚干程序员没多久,一直以为数组名就是指针呢)。在这里做个记号,提醒我以后有时间的时候查一下段错误的原因。今天先总结一下刚从网上找到的数组名和char
输出数组名和输出数组首地址(C++)
char a[] = {'a','b','c'}; char b[] = &quot;abc&quot;; char c[] = { 'a','b','c','\0'}; int d[] = {1,2,3 }; cout &amp;lt;&amp;lt; a &amp;lt;&amp;lt; endl; cout &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl; cout &amp;lt;&amp;lt; c &amp;lt;&amp;lt; endl; co
数组名不等于指针
开始认真学习C语言哦
C语言数组名及指向数组指针的小结
C语言数组名及指向数组指针的小结2012-03-13  happy123g...   阅 2133  转 13转藏到我的图书馆微信分享:C语言的数组名和对数组名取地址转自: http://blog.csdn.net/zdcsky123/article/details/6517811相信不少的C语言初学者都知道,数组名相当于指针,指向数组的首地址,而函数名相当于函数指针,指向函数的入口地址。现在有这