2

我写了这段代码很简单,所以我不明白为什么**str1**str2一样?

代码

#include <stdlib.h>
#include <stdio.h>

int main() {
    char *str1 = "Hey, you";
    char *str2 = malloc(11);
    strcpy(str2, "Hey! You");

    if (*str1 == *str2) {
        printf ("HoHoHo!");
    }

    return 0;
}
4

3 回答 3

5

您的代码中没有**str1 and **str2. 我猜你在问为什么这是真的if (*str1 == *str2)?该代码测试and指向的字符。因为在这两种情况下,表达式的计算结果都为真。str1str2'H'

如果你想比较你使用的 C 风格的字符串strcmp,如果两个字符串相等则返回零。

if (strcmp(str1, str2) == 0)
{
    printf ("HoHoHo!");
}
于 2019-01-16T20:38:15.570 回答
4

str1指向“嘿,你”。

str2指向“嘿!你”

*str1char 那个地址。这本质上是字符串的第一个字母:'H'。str2 的第一个字母也是“H”。因此(*str1 == *str2)是一个真正的表达式,因为 ('H' == 'H')

比较两个字符串:

strcmp(str1, str2)- 如果内容相同,则返回 0,否则返回非零。

于 2019-01-16T20:38:06.563 回答
1

符号之前的*符号在声明和函数体中意味着完全不同的东西。

int *x; - 声明指向int对象的指针

y = *x;-取消引用与声明中的含义相反*的指针。x它取出一层间接,在声明中它增加一层。

我认为这是你困惑的原因。

在您的示例if (*str1 == *str2)中,*“删除”间接,结果是 char 本身(不是指向指针的指针)

于 2019-01-16T21:17:39.830 回答