开发者社区> 问答> 正文

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 谢谢!

展开
收起
a123456678 2016-03-06 10:18:03 1991 0
1 条回答
写回答
取消 提交回答
  • "hello"是字符串常量,编译器会进行优化:

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

    所以:

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

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

    2019-07-17 18:54:09
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++开发PHP7扩展 立即下载
使用C++11开发PHP7扩展 立即下载
移动与复制 立即下载