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 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型