На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА 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
                }
                Цитата E.A. @
                Вопрос наверное простой, но что-то я запутался ) с этими указателями.
                Цель изменить аргумент передаваемый в функцию

                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);
                  }

                Это работает на чистом С , на C++ можно так тоже ( вопрос зачем ) и так как тебе написали,
                лучше поздно чем никогда ;)
                  Цитата sergioK @
                  ExpandedWrap disabled
                    func2 (int * m) // здесь тоже нужен указатель
                    {
                        func1(m);
                    }

                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0305 ]   [ 16 queries used ]   [ Generated: 28.03.24, 18:00 GMT ]