C语言 我是不是真的疯了?

y4ekin9u  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(143)

此问题在此处已有答案

Addresses of two char pointers to different string literals are same(10个答案)
3天前关闭。
好了,这里我们比较了指向字符串名称[10]或Michael(或类似的东西)的指针的内存位置

char name[10]="michael";
char name2[10]="michael";

if (name == name2) { printf("ok\n");
    printf("OKAF\n");
}

当然,如果将计算为false,则什么也不会发生,但是:

char* name="michael";
    char* name2="michael";

    if (name == name2) { printf("ok\n");
            printf("OKAF\n");
        }

    }
~

第三个例子:(这个也行)

char name="michael";
    char name2="michael";

    if (name == name2) { printf("ok\n");
            printf("OKAF\n");
        }

这里我们还比较了内存位置,除了在这种情况下,它的计算结果为真?
我的问题是,我提前为我的乏味道歉,我有点困惑,为什么一个比另一个更有效;我也看到过在不使用strcmp或类似工具的情况下比较两个字符串的实现。我在这里遗漏了什么,有人能用我能理解的语言向我解释一下吗?
我已经尝试了所有的3个,其中2个如预期的那样计算为真,但我仍然很困惑,为什么C中的IF语句==被认为是比较内存位置,为什么使用指针或初始化和定义不良的字符工作,如果它只被认为是比较内存位置。

nqwrtyyt

nqwrtyyt1#

第一个例子:您正在分配指向代码中两个不同位置的两个数组。结果:指针不相等。
第二:你有两个不同的指针指向同一个字符串。编译器可以优化这两个字符串,因为它们实际上是相同的,存储在你的程序的文本部分的同一个区域,导致比较成功。
第三:你不是在比较内存位置,你是在比较字符,它们碰巧是相同的。但是你应该得到一个警告,你正在给一个const char *赋值。

相关问题