为什么我不能使用将指针作为左值返回的函数?
例如,这个工作
int* function()
{
int* x;
return x;
}
int main()
{
int* x = function();
x = new int(9);
}
但不是这个
int* function()
{
int* x;
return x;
}
int main()
{
int* x;
function() = x;
}
虽然我可以使用指针变量作为左值,但为什么我不能使用将指针作为左值返回的函数?
此外,当函数返回a时 然后,参考,而不是指针 它变成了有效的左值。
答案 0 :(得分:1)
你的第一个样本并不能解释为什么我认为你这样做。首先将函数调用的结果存储在变量x中,然后使用新创建的数组覆盖x的值。 *(function())= 5应该正确地尝试将5写入函数内局部变量x指定的某个随机存储单元。
样品:
int x;
int* function()
{
return &x;
}
int main()
{
*(function()) = 5;
printf("%d\n", x);
}
答案 1 :(得分:0)
请在第二个代码段中重新检查main()的最后一个语句。 Lvalues是可用于赋值运算符(=)的 left 的变量。实际上,您将值x分配给函数而不是相反。 函数可以接受参数或返回值。您不能直接为它们分配值。