主题:字符串存放区域的问题
keepspring
[专家分:0] 发布于 2010-04-27 14:03:00
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
cout << ( str1 == str2 ) << endl;
cout << ( str3 == str4 ) << endl;
cout << ( str5 == str6 ) << endl;
cout << ( str7 == str8 ) << endl;
高手请帮忙详细说说为什么前两个为0 后两个是1??
回复列表 (共3个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2010-04-27 20:38:00
char[]是开数组,每开一个数组要求分配相应长度的内存。因此开两个数组会返回两个不同的指针
char*开指针,由于指向同一个字符串常量,编译器优化后会让指针指向同一段内存,因此返回两个相同指针
板凳
jixiangyong [专家分:30] 发布于 2010-04-27 20:57:00
我是这样理解的 前两个比较的是字符串首字符的存储地址 当然不一样, 后两个,过程是这样的,分别申明连个指针,而字符串“abc”是一个常量,这两个指针都指向这个常量,所以指针指向的地址是一样的
3 楼
mywaylgh [专家分:210] 发布于 2010-04-28 13:42:00
指针本身的地址和指针指向的地址是不同的概念,而数组和指针也是有区别的...
运行一下 下面的例子估计你会明白....
[code=c]
#include <stdio.h>
int main()
{
char str1[] = "abc";
char str2[] = "abc";
const char str3[] = "abc";
const char str4[] = "abc";
const char *str5 = "abc";
const char *str6 = "abc";
char *str7 = "abc";
char *str8 = "abc";
printf("str1_str2: %p,%p,%d\n",str1,str2,str1==str2);
printf("addr_str1_str2: %p,%p,%d\n\n",&str1,&str2,&str1==&str2);
printf("str3_str4: %p,%p,%d\n",str3,str4,str3==str4);
printf("addr_str3_str4: %p,%p,%d\n\n",&str3,&str4,&str3==&str4);
printf("str5_str6: %p,%p,%d\n",str5,str6,str5==str6);
printf("addr_str5_str6: %p,%p,%d\n\n",&str5,&str6,&str5==&str6);
printf("str7_str8: %p,%p,%d\n",str7,str8,str7==str8);
printf("addr_str7_str8: %p,%p,%d\n",&str7,&str8,&str7==&str8);
return 0;
}
[/code]
我来回复