На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Передача аргументов в функции, С++
    Вопрос наверное простой, но что-то я запутался ) с этими указателями.
    Цель изменить аргумент передаваемый в функцию

    ExpandedWrap disabled
      // пример 1
       
      func1 (int *n)
      {
          *n = 2;
      }
       
      main()
      {
          int x = 1;
          func1 (&x); // здесь икс станет равен 2
      }

    ExpandedWrap disabled
      // ----------------------------------------
      // пример 2 - как через две функции пропихнуть аргумент который нужно изменить ?
       
      func1 (int *n)
      {
          *n = 2;
      }
       
      func2 (int ??? m) // что здесь нужно ?
      {
          func1( ??? m);
      }
       
      main()
      {
          int x = 1;
          func2 (&x);
      }
    Сообщение отредактировано: E.A. -
      Просто передавай указатель, у тебя меняется значение ведь. Какие проблемы?
      ExpandedWrap disabled
        // ----------------------------------------
        // пример 2 - как через две функции пропихнуть аргумент который нужно изменить ?
         
        func1 (int *n)
        {
            *n = 2;
        }
         
        func2 (int* m) // что здесь нужно ?
        {
            func1(m);
        }
         
        main()
        {
            int x = 1;
            func2 (&x);
        }


      Добавлено
      В С++ аргументы в функции передаются по умолчанию по значению. В твоем случае ты по значению передаешь указатель. Соответственно, если ты изменишь адресс указателя, например выделишь новую память внутри функции и присвоишь ее переданному в аргументе указателю, то при выходе из функции - будет утечка памяти. А твой указатель не изменится. В твоем же случае ты менаешь значение указателя.
        Wound Спасибо, сейчас попробую, работает

        Добавлено
        В примере 2 будет утечка памяти или нет ? Всё там правильно или нужно по-другому ?
        Сообщение отредактировано: E.A. -
          Цитата E.A. @
          В примере 2 будет утечка памяти или нет ? Всё там правильно или нужно по-другому ?

          Нет там не будет утечки памяти, потому как ты передаешь адрес переменной, расположенной на стеке. В случае с динамически выделенной паматью, нужно будет выделять ее до вызова функции и передавать указатель. Например там:
          ExpandedWrap disabled
            func1 (int *n)
            {
                *n = 2;
            }
             
            func2 (int* m) // что здесь нужно ?
            {
                func1(m);
            }
             
            main()
            {
                int* x = new int(); //! Выделяем память динамически
                func2 (x); //! Устанавливаем значение
                /*работаем с x */
                ...
                delete x; //! Освобождаем память.
            }
          Сообщение отредактировано: Wound -
            Wound Спасибо. Вопрос решен.
              ExpandedWrap disabled
                func1 (int& n)
                {
                    n = 2;
                }
                 
                int main()
                {
                    int x = 1;
                    func1 (x); // здесь икс станет равен 2
                }
              Цитата TheMachine @
              т.е. в общем случае вы правы конечно, а мне надо спать больше а пить меньше
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script Execution time: 0,1003 ]   [ 18 queries used ]   [ Generated: 6.12.19, 20:08 GMT ]