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

#include<iostream>usingnamespacestd;intmain(){char*p1,*p2;charstr1[]="hello",str2[]="... #include<iostream>
using namespace std;
int main()
{
char *p1,*p2;
char str1[]="hello",str2[]="hello";
p1=str1;
p2=str2;
cout<<p1<<"\t"<<p2<<endl;
return 0;
}
此程序的输出结果p1,p2的值都为hello,它们的地址值应该相等啊!!!怎么书上说地址值不同啊!!求高手详细解释一下!!
为了感谢各位热心人士的解答,现将此问题加10分!!请问各位此程序如何改才能输出地址,证明他们两个地址是相同的??
展开
 我来答
心冰依然
2011-10-07 · TA获得超过189个赞
知道小有建树答主
回答量:269
采纳率:100%
帮助的人:250万
展开全部
地址是不同的。
因为str1和str2是在堆栈中分配的不同的地址,char str1[]="hello",str2[]="hello";时,"hello"的两份拷贝分别复制到了str1和str2所在的内存地址当中,
而p1的地址指向str1,p2的地址指向了str2.
所以p1和p2 的地址值也会不同。
如果当初是char *p1="hello",*p2="hello”,这样地址就会相同了,因为他们都指向了字符串"hello"的地址,而此时的"hello"不在堆栈中,而是在数据区。
松甜恬0Je4ba
2011-10-07 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3437万
展开全部
值相同,地址值不一定相同,两者之间没有什么直接的联系。
str1和str2是两个不同的字符数组,其起始地址是不相同的,系统给其分配了不同的地址。
p1和p2分别指向这两个不同的地址,其地址值当然不相同。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
未王艮
2011-10-07 · TA获得超过1013个赞
知道小有建树答主
回答量:712
采纳率:0%
帮助的人:383万
展开全部
这个问题就好像你在第一个柜子叫做str1[]的数组放了一块钱
又在第二个柜子str2[]放了一块钱
虽然拿出来的结果都是一块钱,但是这时候放的位置其实已经不一样了
也就是str1[] str2[] 虽然存了一样的字符串,但是存的地址并不相同
你说的相同不过是地址所存的数据相同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
砂昭茫1488
2011-10-07
知道答主
回答量:1
采纳率:0%
帮助的人:1703
展开全部
你给了两个人一人100块 P1得到100块 P2得到100块 这两个人都得到了100块 但是他们不是同一个人 却都得到了100块
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-10-07
展开全部
此处是由于c++里“<<”重载造成的:当输出字符指针的是输出的是该指针所指向的内容,p1和p2是两个不同的变量,他们存放在不同的内存区域,p1中存放的内容为str1的地址,p2中存放的是str2的地址,该地址指向的内容都是hello。
如此这般 这帮如此。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式