这个C指针代码做了什么?

时间:2017-10-28 17:16:02

标签: c pointers

我在a coursera lecture分钟1:06刚刚提出了这段代码。它做了什么?

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

3 个答案:

答案 0 :(得分:10)

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

基本规则归结为以下几点: -

有三个简单的步骤:

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

参考: 1。Clockwise-rule <子> 2。right-left rule

答案 1 :(得分:6)

当你阅读C声明时,你必须阅读它们butrophedonically(古希腊常见的写作方式)。

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

编辑:

答案 2 :(得分:1)

您粘贴的代码实际上是指向函数的指针。该函数的prototype可以是:  $images = explode(',',$your query); <?php foreach ($images as $key => $geth) { ?> <td><img src="<?php echo base_url()."uploads/hotels/".$geth;?>" width="73" height="53"></td> <?php } ?>

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

cmp

然后结果将是负数,例如-1,因为&#39; a&#39;小于&#39; b。在上面的函数调用中,我添加了&amp;在每个参数之前,因为参数数据类型是对字符的指针/引用。 char c1 = 'a'; char c2 = 'b'; int result = cmp(&c1, &c2); 是获取变量地址的操作。

关于您提供的代码,在函数&的名称之前实际上还有一个*。这意味着您希望获得整个函数的引用,而不是任何单个变量或数组。例如,以下是C:

中函数qsort的原型

cmp

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

有关C中指针的详细信息,请查看此link

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