Использование функции, возвращающей apointer как LValue - PullRequest
1 голос
/ 27 апреля 2010

Почему я не могу использовать функцию, возвращающую указатель в качестве 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. Хотя я могу использовать переменную указателя в качестве lvalue, почему я не могу использовать функцию, возвращающую указатель в качестве lvalue?

  2. Кроме того, когда функция возвращает ссылка вместо указателя, то оно становится действительным lvalue.

Ответы [ 2 ]

1 голос
/ 27 апреля 2010

Ваш первый образец не работает, почему я думаю, что вы думаете, что он делает. Сначала вы сохраняете результат вызова функции в переменной x, а затем переопределяете значение x вновь созданным массивом. * (function ()) = 5 должен правильно попытаться записать 5 в какую-нибудь случайную ячейку памяти, указанную локальной переменной x внутри вашей функции.

Пример:

int x;

int* function()
{
    return &x;
}

int main()
{
   *(function()) = 5;
   printf("%d\n", x);
}
0 голосов
/ 27 апреля 2010

Пожалуйста, перепроверьте последнее утверждение main () во втором фрагменте кода. L-значения - это переменные, которые можно использовать слева от оператора присваивания (=). Вы фактически присваиваете значение x функции, а не наоборот. Функция может принимать аргументы или возвращать значения. Вы не можете напрямую присвоить им значение.

...