return语句中的奇怪表达式

che*_*oky 6 c recursion return

我找到了一个递归函数,让我有点惊讶这个函数计算出现在数组中的所有负数:

int count_negative(int arr[], int n)
{
  if ( n > 0 )
    return (*arr < 0) + count_negative( ++arr, n - 1 );
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释这一行:

return (*arr < 0) + count_negative( ++arr, n-1 );
Run Code Online (Sandbox Code Playgroud)

谢谢

Nik*_*lai 6

(*arr < 0)将数组的第一个元素与零进行比较.表达式的结果可以是1(第一个元素是负数)或者0(第一个元素是正数或零).因此,负数元素的数量是该表达式与数组尾部中负数元素数之和.