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
在我的网络编程课程中,我遇到了以下函数,它初始化了一个 _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