实际参数列表中的赋值运算符

时间:2015-04-03 09:56:04

标签: c++ parameter-passing

int main ()
{
char* a[5] = {0}
char* b = //char type address here.;
char c[] = "copy";
strcpy(a[1] = b, c);
}

如何评估strcpy(a[1] = ba[1]是否被发送到该函数?

我无法测试这个atm,我在手机上。

2 个答案:

答案 0 :(得分:1)

计算表达式a[1] = b,然后将结果作为参数传递。结果既不是a[1]也不是b,但它等于两者。

你可以这样认为

char *compiler_generated_temp_variable = a[1] = b;
strcpy(compiler_generated_temp_variable, c);

答案 1 :(得分:1)

根据C ++标准

  

5.17分配和复合赋值运算符

     

1赋值运算符(=)和复合赋值运算符   所有组从右到左。所有都需要左侧可修改的左值   操作数和返回引用左操作数的左值。

因此这句话

strcpy(a[1] = b, c);

等同于逗号运算符

的语句
a[1] = b, strcpy( a[1], c);

所以问题的答案

  

是否会将[1]发送给该函数?

将是你是对的(我的祝贺:))。 a [1]在赋值给b之后被发送到函数。