请大家进来讨论讨论这个问题……

xujianhua815926 2004-11-21 03:26:08
# include <iostream.h>
void main()
{
int a[]={1,3,4};
cout<<a<<endl;
cout<<&a<<endl;
cout<<&a[0]<<endl;
}
//运行结果是:
0X0012FF74
0X0012FF74
0X0012FF74



但下面这个我就不弄不懂了,

# include <iostream.h>
void main()
{
char a[]="hello";
cout<<a<<endl;
cout<<&a<<endl;
cout<<&a[0]<<endl;
}
//运行结果是:
hello
0X0012FF78
hello

不是说数组名就代表地址么,所以我认为它们的答案也应该一样,请大家讨论讨论……
...全文
111 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2004-11-21
  • 打赏
  • 举报
回复
嗯,理解为字符串的处理
260005065 2004-11-21
  • 打赏
  • 举报
回复
字符串是特殊的,就这样理解吧,嘿嘿。。
beepbug 2004-11-21
  • 打赏
  • 举报
回复
cout是按字串的首址输出字串的,一直到遇到'\0'为止。这是C/C++的经典做法,一点也不奇怪啊。
hqb__10 2004-11-21
  • 打赏
  • 举报
回复
a虽然和&a[0]结果是一样的,但是代表的意思是完全不同的,a代表的是你定义的整个单元块的地址,但是后都却代表第一个数(字符)的地址,a 不能做指针加减运算,但是后都却可以
lamputa_lito 2004-11-21
  • 打赏
  • 举报
回复
就程序而言,作用一样。但是你要知道的一点是cout遇到\0的时候才会结束。
你字符串的结尾为\0,但是整数数组呢?自己考虑吧
烂笔头Danky 2004-11-21
  • 打赏
  • 举报
回复
首先a和&a[0]是等价的,它们都是代表该字符串的首地址,当cout收到这是一个地址而且又检测到这个a是char类型的,所以cout会从这个地址开始输出内存中的字符直到遇到/0就停止!

但cout <<&a我本人就不太好解释了,因为没有详细这样做过这样的实验,不过这还是可以理解的,既然第一例子你是明白的,那跟第一例子联系起来就可以想到用一个取地址符加一个对象名就可以输出该对象的首地址!因为没有做过详细的实验,所以这个也只是我的个人理解而已(这是我想象cout处理字符串的结构),不过我想这样的问题或许在《深度探索C++对象模型》这本书里可以找到答案或许启示!
newegg2002 2004-11-21
  • 打赏
  • 举报
回复
a 与&a[0] 总是相同的,,
应该是输出流对字符串数组和一般数组的输出处理不同吧,,
前几天听谁说过...
www_big 2004-11-21
  • 打赏
  • 举报
回复
进来学习学习
dongyuanzhang 2004-11-21
  • 打赏
  • 举报
回复
这个问题很简单啊!char a[]="hello";中a就是指向hello的指针啊!第一个输出就是输出他所指的字符串;第二个输出是a变量的地址!第三个同一。
sharkhuang 2004-11-21
  • 打赏
  • 举报
回复
char a[]="hello";eq
char *a="hello";
是不是会被转换为string?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧