search91 2015-04-20 08:00 采纳率: 100%
浏览 4503
已采纳

C++中strcmp和 ==的比较问题

    char *str1 = "hello";
    char str2[] = "hello";
    if (str1 == "hello")
        printf("ok1\n");
    if (str2 == "hello")
        printf("ok2\n");
    if (strcmp(str1, "hello"))
        printf("ok3\n");
    if (strcmp(str2, "hello"))
        printf("ok4\n");

一道基础题,知道 ==比较地址,strcmp比较内容。
请各位大神指教为何输出的是 ok1 谢谢!

  • 写回答

9条回答 默认 最新

  • 开水 2015-04-20 08:23
    关注

    "hello"是字符串常量,编译器会进行优化:

    由于所有的"hello"都是相同的,整个程序中只需要有一个"hello"字符串。然后所有引用"hello"这个字符串的**指针变量**都赋值成相同的地址。

    所以:

    char *str1 = "hello";"hello"的地址是相同的。

    对于:char str2[] = "hello";,这里str2并不是指针,类型里已经说明它是一个数组,所以这会是另一个内存地址,于是str2"hello"的地址是不同的。

    strcmp的部分你应该清楚,我就不解释了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?