使用函数将指针返回为LValue

时间:2010-04-27 04:18:09

标签: function pointers lvalue

为什么我不能使用将指针作为左值返回的函数?

例如,这个工作

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;
}
  1. 虽然我可以使用指针变量作为左值,但为什么我不能使用将指针作为左值返回的函数?

  2. 此外,当函数返回a时 然后,参考,而不是指针 它变成了有效的左值。

2 个答案:

答案 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分配给函数而不是相反。  函数可以接受参数或返回值。您不能直接为它们分配值。