在单个参数函数中传递带括号的两个值
Passing two values with parentheses in a single argument function
我从一个要求提供代码输出的网站上得到这个问题
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
函数被调用递归地传递括号内的两个值。优先级和结合性在这里如何工作?
,
in (i++, i)
是逗号运算符。它的操作数从左到右计算。它计算 i++
,i
的值递增,表达式 i++
的值被丢弃,然后递增的值传递给函数。所以,最终只有一个参数被传递给函数reverse
。
这不是 two 带有额外括号的值,而是 one 包含 comma operator.[=11= 的参数]
根据haccks,这里是一个逗号运算符。
表达式:
(i++, i)
首先对expression1求值,然后对expression2求值,返回expression2的值 表示整个表达式。
解释:
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?
的是什么?
括号被使用,所以逗号运算符首先被执行,我们得到 a
分配为 3
所以先执行逗号之前的语句,然后分配 3
你的情况
i++
先执行,然后 i
作为参数传递
我从一个要求提供代码输出的网站上得到这个问题
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
函数被调用递归地传递括号内的两个值。优先级和结合性在这里如何工作?
,
in (i++, i)
是逗号运算符。它的操作数从左到右计算。它计算 i++
,i
的值递增,表达式 i++
的值被丢弃,然后递增的值传递给函数。所以,最终只有一个参数被传递给函数reverse
。
这不是 two 带有额外括号的值,而是 one 包含 comma operator.[=11= 的参数]
根据haccks,这里是一个逗号运算符。
表达式:
(i++, i)
首先对expression1求值,然后对expression2求值,返回expression2的值 表示整个表达式。
解释:
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?
括号被使用,所以逗号运算符首先被执行,我们得到 a
分配为 3
所以先执行逗号之前的语句,然后分配 3
你的情况
i++
先执行,然后 i
作为参数传递