c++问题!!高手请进!!!

#include<iostream>usingnamespacestd;intmain(){charname[10]="Ding";cout<<name<<endl;co... #include<iostream>
using namespace std;
int main()
{
char name[10]="Ding";
cout<<name<<endl;
cout<<&name[0]<<endl;

return 0;
}
name是Ding内存空间的地址,cout<<name<<endl;输出的应为地址值啊!!name[0]是等于D,cout<<&name[0]<<endl;输出的应该是D的地址才对啊!!怎么这两个语句输出的结果都是Ding啊!!请问怎么解释这种情况??
展开
 我来答
snowboy_snow
2011-10-19 · TA获得超过182个赞
知道小有建树答主
回答量:143
采纳率:0%
帮助的人:116万
展开全部
若是你想输出地址的值
可以把
&name[0] 改成 (unsigned int) (&name[0]) 就行了.

进一步说一下编译器是怎么知道 name是一个地址的
(1)你在使用name这个变量时,是定义过的 char name[10], 也就是告诉了编译器,"name"是一个数组,而这个name就被祖作是这个数组的第一个元素的地址,也就是数组的开始地址
(2) 你在使用 &name[0]的时候,用了取地址算符"&" ,那么编译器认为你要得到的这个值,要当作一个地址看,"而不是一个数字".
(3) 对于cout这个函数,如果放在"输出位置的是一个地址",它会把它看成一个字符串的首地址,从而理解为开发人员想要输出一个字符串。而你用 name 和 &name[0] 都是产生一个地址,所以输出的就是一个字符串。而如果用(unsigned int )进行强制转换,则告诉编译器“我要输出一个数字”,则得到了这个用数字表示的地址值。
fagool
2011-10-09
知道答主
回答量:49
采纳率:0%
帮助的人:16.4万
展开全部
让我来告诉你吧,cout<<name<<endl; ----->输出Ding,相当于printf("%s",name);

cout<<&name[0]<<endl;------------>输出Ding,相当于printf("%s",name);

为何?因为,用cout或cin进行输出/输入时,C++编译器会自动判断变量的类型。
C语言中,
printf("%s",name);将会输出Ding
printf("%d",name);才会输出name的内存地址。
可见,你看书不认真。
更多追问追答
追问
&name[0]输出的为什么是hello??我上面的那种解释为什么就不对,你能结合我给的例子讲一下吗??
追答
1. 因为,此题中,name代表name[10]的首地址,也就是name[0]的地址,即&name[0],所以,输出的结果都是Ding.

2.如果你真的要输出name[0]的地址,,即name[10]的首地址,那就是下面这句话:cout<<&name<<endl; 意思是说,我要输出指针变量name的地址,而非输出name指向的字符串。
再次强调一下,用cout或cin进行输出/输入时,C++编译器会自动判断变量的类型。&name代表要输出的是一个地址类型。这个,与C语言稍微有点区别。你肯定是个初学者,好好想想,再结合我上面的关于C的论述,调试一下!欢迎询问!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-10-17 · TA获得超过126个赞
知道答主
回答量:150
采纳率:0%
帮助的人:118万
展开全部
name是元素数组的入口地址,name是一个常量,你写name代表输出从地址name开始输出数组元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式