2

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

例如这个作品

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. 此外,当函数返回引用而不是指针时,它就成为有效的左值。

4

2 回答 2

1

你的第一个样本不符合我认为你认为的原因。您首先将函数调用的结果存储在变量 x 中,然后用新创建的数组覆盖 x 的值。*(function()) = 5 应该正确地尝试将 5 写入函数内部局部变量 x 指定的某个随机内存位置。

样本:

int x;

int* function()
{
    return &x;
}

int main()
{
   *(function()) = 5;
   printf("%d\n", x);
}
于 2010-04-27T04:26:24.557 回答
0

请重新检查第二个代码片段中 main() 的最后一条语句。左值是可用于赋值运算符 (=) 左侧的变量。您实际上是将值 x 分配给函数,而不是相反。函数可以接受参数或返回值。您不能直接为它们赋值。

于 2010-04-27T04:27:07.607 回答