【问题标题】:Reference inside node?节点内部引用?
【发布时间】:2016-12-03 00:41:09
【问题描述】:

我正在尝试构建 BST。我的结构;

typedef struct node{
    int charSize;
    char english[30];
    char span[40];
    struct node *left;
    struct node *right;
} BST;

我正在尝试比较两个字符数组。在 Xcode 中,它没有给我任何警告,使用以下几行来比较数组,但我确定它是错误的,并且想知道为什么它没有给我一个错误。

if (head->english <= head2->english)
    printf("headOne is smaller or equal");
else
    printf("headOne is Bigger");

【问题讨论】:

标签: c struct linked-list binary-search-tree


【解决方案1】:
if (head->english <= head2->english)

为什么它没有给我一个错误。

因为比较指针head-&gt;englishhead2-&gt;english 是合法的。记住数组名(字符数组或任何其他类型的数组)是指向第一个元素的指针。所以在这里你实际上是在比较这两个指针。

这当然不是你想要的,你需要strcmp来比较C字符串。

【讨论】:

  • 所以从这个意义上说,我正在比较数组的第一个元素。两个数组的第一个元素相同,为什么不打印“headOne is small or equal”?
  • 它们是指向第一个元素的指针,而不是第一个元素本身
  • 感谢您的帮助!
【解决方案2】:

if (head-&gt;english &lt;= head2-&gt;english) 将比较指针的值,即它们指向的地址。不是内存地址的内容。

strcmp()实际上会比较字符串中各个字符的值,所以对排序更有用。

如果你想确定哪个字符串更长,你应该使用if (strlen(head-&gt;english) &lt;= strlen(head2-&gt;english))

【讨论】:

    猜你喜欢
    • 2019-03-12
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2017-05-01
    • 1970-01-01
    • 2014-02-01
    相关资源
    最近更新 更多