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

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条)

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿