Адрес всегда возвращается 0 вместо фактического значения - PullRequest
1 голос
/ 12 апреля 2020

Вот простой код:

int *ad_return()
{
    int a=600;
    cout << &a << endl;
    return &a;
}

int main()
{
    cout << ad_return();
    return 0;
}

Вывод неожиданный. Первый cout печатает адрес, который выглядит как адрес, но cout, который находится в основном, печатает файл git 0. Я нигде не мог найти объяснение.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2020

Исходя из того, что я экспериментировал, я пришел к следующему выводу:

Поскольку адрес локальной переменной, которая уже вышла из области видимости, не определен, кажется, что g cc и g ++ решили реализовать функцию, которая устанавливает это в ноль (возможно, чтобы убедиться, что код работает с ошибками вместо генерации совершенно странного поведения). В clang этого не происходит, но значение не определено, поэтому оба этих компилятора работают в соответствии со стандартом.

0 голосов
/ 12 апреля 2020

Попробуйте этот код.
Возникла проблема, когда вы пытались получить доступ к адресу локальной переменной a, он недоступен вне функции as_return (). Так объявите это в глобальном, так что он доступен для всех.

   #include<iostream>
  using namespace std;
  int a;
  int *ad_return()
  {
   a=600;
   cout << &a << endl;
   return &a;
  }

  int main()
  {
   cout << ad_return();
   return 0;
   }

.
Output Screen

Я надеюсь, что вы получили ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...