我从一个要求提供代码输出的网站上得到了这个问题
$this->db->select('COUNT(*) as total');
$this->db->where('where', 0);
$query = $this->db->get('table');
输出为void reverse(int i)
{
if (i > 5)
return ;
printf("%d ", i);
return reverse((i++, i));
}
int main(int argc, char *argv[]) {
reverse(1);
return 0;
}
但是1 2 3 4 5
函数被称为在parantheses中递归传递两个值。优先级和关联性如何在这里工作?
答案 0 :(得分:5)
,
中的 (i++, i)
是逗号运算符。它的操作数从左到右进行评估。它评估i++
,i
的值增加并且表达式i++
的值被丢弃,然后递增的值被传递给函数。因此,最终只有一个参数传递给函数reverse
。
答案 1 :(得分:4)
这不是带有额外括号的两个值,而是包含comma operator的一个参数。
答案 2 :(得分:3)
答案 3 :(得分:1)
阐释:
void reverse(int i)
{
if (i > 5)
return ;
printf("%d ", i);
return reverse((i++, i)); // it's single arument that is (i++ , i)
}
int main(int argc, char *argv[]) {
reverse(1);
return 0;
}
更多解释如
a = (1, 2, 3);
(1,2,3)
是一个参数但是分配给了什么?
使用括号,因此首先执行逗号运算符,然后将a
指定为3
首先执行逗号之前的语句,然后分配3
在您的情况下
首先执行i++
,然后将i
作为参数传递