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啊!!请问怎么解释这种情况?? 展开
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啊!!请问怎么解释这种情况?? 展开
3个回答
展开全部
若是你想输出地址的值
可以把
&name[0] 改成 (unsigned int) (&name[0]) 就行了.
进一步说一下编译器是怎么知道 name是一个地址的
(1)你在使用name这个变量时,是定义过的 char name[10], 也就是告诉了编译器,"name"是一个数组,而这个name就被祖作是这个数组的第一个元素的地址,也就是数组的开始地址
(2) 你在使用 &name[0]的时候,用了取地址算符"&" ,那么编译器认为你要得到的这个值,要当作一个地址看,"而不是一个数字".
(3) 对于cout这个函数,如果放在"输出位置的是一个地址",它会把它看成一个字符串的首地址,从而理解为开发人员想要输出一个字符串。而你用 name 和 &name[0] 都是产生一个地址,所以输出的就是一个字符串。而如果用(unsigned int )进行强制转换,则告诉编译器“我要输出一个数字”,则得到了这个用数字表示的地址值。
可以把
&name[0] 改成 (unsigned int) (&name[0]) 就行了.
进一步说一下编译器是怎么知道 name是一个地址的
(1)你在使用name这个变量时,是定义过的 char name[10], 也就是告诉了编译器,"name"是一个数组,而这个name就被祖作是这个数组的第一个元素的地址,也就是数组的开始地址
(2) 你在使用 &name[0]的时候,用了取地址算符"&" ,那么编译器认为你要得到的这个值,要当作一个地址看,"而不是一个数字".
(3) 对于cout这个函数,如果放在"输出位置的是一个地址",它会把它看成一个字符串的首地址,从而理解为开发人员想要输出一个字符串。而你用 name 和 &name[0] 都是产生一个地址,所以输出的就是一个字符串。而如果用(unsigned int )进行强制转换,则告诉编译器“我要输出一个数字”,则得到了这个用数字表示的地址值。
展开全部
让我来告诉你吧,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的内存地址。
可见,你看书不认真。
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的论述,调试一下!欢迎询问!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
name是元素数组的入口地址,name是一个常量,你写name代表输出从地址name开始输出数组元素。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询