C奇怪if语句语法

时间:2016-11-02 04:28:09

标签: c if-statement

我看到了这个if声明,我不确定它是如何工作的,与什么相比较的是什么?是否缺少&&||? parens使我感到困惑。

if ((list->func)((list->head)->dataPointer, newOb) < 0) {

2 个答案:

答案 0 :(得分:5)

  

与什么相比? parens使我感到困惑。

if()之间的部分结果与0进行比较,就像在每个if语句中一样。

  

缺少&amp;&amp;或者||?

我没有看到任何&amp;&amp;或||

  

parens使我困惑。

(list->func)((list->head)->dataPointer, newOb)的作用(不一定按此顺序):

  • 评估list->func
  • 评估(list->head)->dataPointer
  • 致电 list->func传递两个参数(list->head)->dataPointernewOb

然后将其结果与0进行比较,因为它是if()之间的对象。

答案 1 :(得分:0)

好的,所以第一组括号表示该列表是一个指向对象的指针,该对象有一个名为func的成员。 func是一个函数。所以(list-&gt; func)是一个函数调用。该函数显然有两个参数。传入的第一个参数是(list-&gt; head) - &gt; dataPointer。 (list-&gt; head)表示指向列表的指针所指向的对象有一个名为head的成员。 head也是一个指针,它指向一个名为dataPointer的成员。传递给函数的第二个参数(list-&gt; func)是newOb。函数(list-&gt; func)显然返回某种数值,可能是int。
代码可以重写为:     if(list-&gt; func(list-&gt; head-&gt; dataPointer,newOb)&lt; 0) 如果这有助于你了解发生了什么。