回 帖 发 新 帖 刷新版面

主题:字符串存放区域的问题

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个回复)

沙发

char[]是开数组,每开一个数组要求分配相应长度的内存。因此开两个数组会返回两个不同的指针
char*开指针,由于指向同一个字符串常量,编译器优化后会让指针指向同一段内存,因此返回两个相同指针

板凳

我是这样理解的 前两个比较的是字符串首字符的存储地址 当然不一样,   后两个,过程是这样的,分别申明连个指针,而字符串“abc”是一个常量,这两个指针都指向这个常量,所以指针指向的地址是一样的

3 楼

指针本身的地址和指针指向的地址是不同的概念,而数组和指针也是有区别的...
运行一下 下面的例子估计你会明白....

[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]

我来回复

您尚未登录,请登录后再回复。点此登录或注册