C 语法 - 函数调用中的三元运算符

C syntax - Ternary Operator in a function call

在我的网络编程课程中,我遇到了以下函数,它初始化了一个 _body 类型的结构:

_body f1(int pkg_type, int key_len, void* key, int value_len, void* value) {
    _body new_body; 
    new_body.key_len = 0;
    new_body.key = NULL;
    new_body.value_len = 0;
    new_body.value = NULL;
    return new_body; }

在给定某些条件下调用此函数来初始化结构的另一个函数:

_body f2(void* pkg_body, another_struct pkg_header) {
_body new_body;
new_body = f1(pkg_header.pkg_type, pkg_header.key_len, (pkg_header.key_len) ? pkg_body : NULL, pkg_header.value_len, (pkg_header.value_len) ? pkg_body + pkg_header.key_len : NULL);
return new_body;}

问题:行是什么:

new_body = f1(pkg_header.pkg_type, pkg_header.key_len, (pkg_header.key_len) ? pkg_body : NULL, pkg_header.value_len, (pkg_header.value_len) ? pkg_body + pkg_header.key_len : NULL);

具体怎么做?它是如何工作的,我如何根据 if 条件来理解它?

请注意,我没有提供结构及其值的明确定义,因为我的问题只是关于理解语法。

写作:

int variable = (is_random_check_true() ? 1 : 2)

写法一样:

int variable;

if (is_random_check_true()) {
    variable = 1;
} else {
    variable = 2;
}

三元运算符只是“returns”一个值,它可以用来做任何你想让它做的事情(在我的例子中将它存储在一个变量中)。但是您可以使用它来将不同的值传递给函数调用,就像您的情况一样。

请注意,三元返回的 2 个可能值应该具有相同的类型,在您的情况下 void * 和在我的情况下 int