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分!!请问各位此程序如何改才能输出地址,证明他们两个地址是相同的?? 展开
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分!!请问各位此程序如何改才能输出地址,证明他们两个地址是相同的?? 展开
5个回答
展开全部
地址是不同的。
因为str1和str2是在堆栈中分配的不同的地址,char str1[]="hello",str2[]="hello";时,"hello"的两份拷贝分别复制到了str1和str2所在的内存地址当中,
而p1的地址指向str1,p2的地址指向了str2.
所以p1和p2 的地址值也会不同。
如果当初是char *p1="hello",*p2="hello”,这样地址就会相同了,因为他们都指向了字符串"hello"的地址,而此时的"hello"不在堆栈中,而是在数据区。
因为str1和str2是在堆栈中分配的不同的地址,char str1[]="hello",str2[]="hello";时,"hello"的两份拷贝分别复制到了str1和str2所在的内存地址当中,
而p1的地址指向str1,p2的地址指向了str2.
所以p1和p2 的地址值也会不同。
如果当初是char *p1="hello",*p2="hello”,这样地址就会相同了,因为他们都指向了字符串"hello"的地址,而此时的"hello"不在堆栈中,而是在数据区。
展开全部
值相同,地址值不一定相同,两者之间没有什么直接的联系。
str1和str2是两个不同的字符数组,其起始地址是不相同的,系统给其分配了不同的地址。
p1和p2分别指向这两个不同的地址,其地址值当然不相同。
str1和str2是两个不同的字符数组,其起始地址是不相同的,系统给其分配了不同的地址。
p1和p2分别指向这两个不同的地址,其地址值当然不相同。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题就好像你在第一个柜子叫做str1[]的数组放了一块钱
又在第二个柜子str2[]放了一块钱
虽然拿出来的结果都是一块钱,但是这时候放的位置其实已经不一样了
也就是str1[] str2[] 虽然存了一样的字符串,但是存的地址并不相同
你说的相同不过是地址所存的数据相同
又在第二个柜子str2[]放了一块钱
虽然拿出来的结果都是一块钱,但是这时候放的位置其实已经不一样了
也就是str1[] str2[] 虽然存了一样的字符串,但是存的地址并不相同
你说的相同不过是地址所存的数据相同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你给了两个人一人100块 P1得到100块 P2得到100块 这两个人都得到了100块 但是他们不是同一个人 却都得到了100块
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-10-07
展开全部
此处是由于c++里“<<”重载造成的:当输出字符指针的是输出的是该指针所指向的内容,p1和p2是两个不同的变量,他们存放在不同的内存区域,p1中存放的内容为str1的地址,p2中存放的是str2的地址,该地址指向的内容都是hello。
如此这般 这帮如此。。
如此这般 这帮如此。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询