【问题标题】:Using a Function returning apointer as LValue使用返回指针作为 LValue 的函数
【发布时间】:2010-04-27 04:18:08
【问题描述】:

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

例如这个工作

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

【问题讨论】:

  • 你试过用括号括起来吗?例如*(myfunction()) = x;... 另外,您是要分配给它,还是分配给它指向的位置(即x = somepointer;*x = somepointer;)?有区别。

标签: function pointers lvalue


【解决方案1】:

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

示例:

int x;

int* function()
{
    return &x;
}

int main()
{
   *(function()) = 5;
   printf("%d\n", x);
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-07
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多