【问题标题】:What does this C pointer code do?这个 C 指针代码有什么作用?
【发布时间】:2017-10-28 17:16:01
【问题描述】:

我刚刚在a coursera lecture 的 1:06 分钟想出了这个代码。它有什么作用?

int (*cmp)(char*, char*);

【问题讨论】:

标签: c pointers


【解决方案1】:

这是一个指向函数的指针,该函数返回一个 int 并将两个字符指针作为参数。


基本规则归结为几件事:-

只需三个简单的步骤:

  • 从未知元素开始,沿螺旋/顺时针方向移动;当遇到以下元素时,用相应的英文语句替换它们:[X] or []
    1. 数组X大小...或数组未定义大小...(type1, type2)
    2. 函数传递type1type2 返回... *
    3. pointer(s) to... 继续以螺旋/顺时针方向执行此操作,直到覆盖所有标记。始终首先解决括号中的任何内容!

参考:1.Clockwise-rule 2.right-left rule

【讨论】:

    【解决方案2】:

    当您阅读 C 声明时,您必须阅读它们 butrophedonically(古希腊常用的石头书写方式)。

    pointer to
      function that 
        has (char*, char*) type parameters as input
        and int as output
    

    编辑:

    【讨论】:

      【解决方案3】:

      您粘贴的代码实际上是一个指向函数的指针。函数的prototype 可以是: int cmp (char*, char*);

      这个函数一共有三个部分:返回类型是一个整数,函数名是cmp,还有两个参数,都是一个指向一个字符(数组)的指针。具体来说,该函数用于排序,例如,如果第一个参数小于第二个参数,则该函数将返回负数,如果相等则返回零,如果大于则返回正数。例如,如果我有以下代码:

      char c1 = 'a';
      char c2 = 'b';
      int result = cmp(&c1, &c2);
      

      那么结果将是一个负数,例如-1,因为“a”小于“b”。在上面的函数调用中,我在每个参数之前添加了 &,因为参数数据类型是字符的指针/引用。 & 是获取变量地址的操作。

      关于您提供的代码,实际上在函数名称cmp 之前多了一个*。这意味着您想要获取整个函数的引用,而不是任何单个变量或数组。例如下面是C语言中qsort函数的原型:

      void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

      此函数的第三个参数实际上与您提供的代码非常相似。这样做的原因是您可以直接将整个函数作为参数传递给另一个函数,例如 qsort。

      查看link 了解有关 C 中指针的详细信息。

      我希望这能回答你的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-13
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        • 2016-10-11
        • 2011-07-18
        • 1970-01-01
        相关资源
        最近更新 更多