所以在
#include
int main(int argc , char *argv[])
{
int n;
n = _strlen_recursion("Corbin Coleman");
printf("%d\n", n);
}
int _strlen_recursion(char *s)
{
static int count = 0;
count++;
return (count), count = 0;
}
逗号运算符有效的位置
0
可以在屏幕上看到。为什么?
所以真正的问题是:return
有()
重载,如上所述sizeof
是吗?
发布于 2021-02-25 11:33:53
return
并不类似于sizeof
..。的操作数sizeof
是括号中的类型或表达式。
Areturn
语句只有一个表达式(或没有)。括号不是return语句语法的一部分。括号可能只出现在表达式中,因为它们是表达式的一部分。
在return (count), count = 0;
,表达式为
(count), count = 0
..。这是一个逗号表达式。它评估
(count)
,则丢弃结果值,然后计算count = 0
..。它的值是赋值的,0,所以这是逗号表达式的值,所以返回0。
发布于 2021-02-25 10:15:47
在返回statement](https://en.cppreference.com/w/cpp/language/return) [
return (count), count = 0;
attr(可选)返回表达式(可选);(1)
表达式为(count), count = 0
,as逗号operator](https://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator) [,第一个操作数(count)
被计算并丢弃结果,则第二个操作数count = 0
的值,则其值作为omma运算符的返回值返回,并作为_strlen_recursion()
晚点再说。
发布于 2021-02-25 10:16:04
逗号在C中的作用与二元运算符相同+
,-
,&
,C中的所有其他运算符都是这样做的。它接受两个操作数并充当序列点。左操作数,(count)
在您的示例中,将计算结果,然后丢弃结果。从这里开始,右边的操作数,count = 0
,并返回其返回值。在您的示例中,左操作数没有副作用,因此它基本上是无用的。这条线return (count), count = 0;
相当于这两行
(void) (count);
return count = 0;
请注意count = 0
是一个赋值,在C中,赋值返回赋值的值,所以在本例中,这个表达式返回0,最终返回函数。
https://stackoverflow.com/questions/66361430
复制相似问题