实际参数列表中的赋值运算符
assignment operator in actual parameter list
int main ()
{
char* a[5] = {0}
char* b = //char type address here.;
char c[] = "copy";
strcpy(a[1] = b, c);
}
strcpy(a[1] = b
如何评估? a[1]
是否发送到函数?
我无法测试这个 atm,我在 phone。
表达式 a[1] = b
被求值,然后 结果 作为参数传递。结果既不是 a[1]
也不是 b
,但两者都相等。
你可以这样想
char *compiler_generated_temp_variable = a[1] = b;
strcpy(compiler_generated_temp_variable, c);
根据 C++ 标准
5.17 Assignment and compound assignment operators
1 The assignment operator (=) and the compound assignment operators
all group right-to-left. All require a modifiable lvalue as their left
operand and return an lvalue referring to the left operand.
因此这个声明
strcpy(a[1] = b, c);
等同于带逗号运算符的语句
a[1] = b, strcpy( a[1], c);
所以你问题的答案
Does a[1]get sent to the function?
将是你是对的(我的祝贺:))。 a[1] 在将 b 赋值给它之后被发送到函数。
int main ()
{
char* a[5] = {0}
char* b = //char type address here.;
char c[] = "copy";
strcpy(a[1] = b, c);
}
strcpy(a[1] = b
如何评估? a[1]
是否发送到函数?
我无法测试这个 atm,我在 phone。
表达式 a[1] = b
被求值,然后 结果 作为参数传递。结果既不是 a[1]
也不是 b
,但两者都相等。
你可以这样想
char *compiler_generated_temp_variable = a[1] = b;
strcpy(compiler_generated_temp_variable, c);
根据 C++ 标准
5.17 Assignment and compound assignment operators
1 The assignment operator (=) and the compound assignment operators all group right-to-left. All require a modifiable lvalue as their left operand and return an lvalue referring to the left operand.
因此这个声明
strcpy(a[1] = b, c);
等同于带逗号运算符的语句
a[1] = b, strcpy( a[1], c);
所以你问题的答案
Does a[1]get sent to the function?
将是你是对的(我的祝贺:))。 a[1] 在将 b 赋值给它之后被发送到函数。