2017-01-21 27 views
3

我接到了一个网站,要求给予代码的输出这个问题传递两个值括号在一个单独的参数功能

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

reverse功能被称为递归传递两个值得考虑的内容。在这里工作的优先级和关联性如何?

回答

5

, in (i++, i)是一个逗号运算符。它的操作数从左到右进行评估。它评估i++,i的值得到递增,并且表达式i++的值被丢弃,然后递增的值被传递给该函数。因此,最终只有一个参数被传递给函数reverse

4

这不是值与额外的括号,但包含comma operator一个说法。

3

根据haccks,这是一个逗号运算符。

表达:

(i++, i) 

首先表达式被评估,然后表达式2被评估,并返回整个表达式表达式2的值。

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作为参数传递