Работа с динамической памятью. Подскажите...

Тема в разделе "Общие вопросы по С и С++", создана пользователем Podarochek, 24 июл 2007.

Статус темы:
Закрыта.
  1. Podarochek

    Podarochek Гость

    Через функцию можно ли изменить адрессацию переданного ей указателя на память выделяемую в той же функции, не получается...
     
  2. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    да не получается... точно выражать свои мыслм
     
  3. Podarochek

    Podarochek Гость

    Дан массив целых чисел. Создать функцию, позволяющаю добавить елемент в конец массива...
     
  4. Podarochek

    Podarochek Гость

    подробно: :)

    можно ли через функцию изменить адрессацию указателя на память из кучи выделенной в этой же функции.
    Есть массив. с помощью пользовательской функции, добавить элемент к массиву.
    Решаю так. передача функции указателя на массив,размерность массива и добавляемый элемент. В функции создаю в куче еще один массив, размерность которого больше на один и копирую туда старый массив+элемент. Старый массив удаляю, а возвращаю новый указатель. Вопрос: можно ли изменить адрессацию указателя прямо в функции, а не возвращать указатель?

    int* add_el(int *_p,int& size, int el)//1) добавление элемента в конец массива;
    {
    int *p;
    p=new int [size+1];
    for (int i=0;i<size;i++)
    {
    p=_p;
    }
    p[size]=el;
    delete[]_p;
    size++;
    return p;

    }
     
  5. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    это выражение ест мой моск

    если я правильно понял, то нужно в таком случае передавать в функцию не указатель на массив, а указатель на указатель.

    int* add_el(int **_p,int& size, int el)//
     
  6. mms

    mms Гость

    Код (Text):
    void add_el(int **_p,int& size, int el)
    {
    int *p;
    p=new int [size+1];
    for (int i=0;i<size;i++)
    {
    p[i]=(*_p)[i];
    }
    p[size]=el;
    delete[] _p;
    size++;
    *_p = p;
    }
    Что-то типа этого видимо :(

    А вообще для добавления каждого элемента создавать новый массив - это жесть.
     
  7. Podarochek

    Podarochek Гость

    Предложите способы, но без ООП...
     
  8. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: Podarochek
    А где здесь ООП? Указатель на указатель это уже ООП? Ну-ну...
     
  9. Podarochek

    Podarochek Гость

    <!--QuoteBegin-mms+24:07:2007, 09:46 -->
    <span class="vbquote">(mms @ 24:07:2007, 09:46 )</span><!--QuoteEBegin-->это выражение ест мой моск
    [snapback]73155" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    ..а мой как ест...я не претендую на звание самого красноречивого программиста поскольку даже не чайник в нем, а где-то "блюдце", но надо с чего-то начинать...пока как могу...
    разобрался...можно передать ссылку на указатель....void add_el(int &*_p,int& size, int el), спасибо...


    всетаки, будут еще предложения? Дабы такие вопросы больше не появлялись на форумах и братья наши "по разуму" - достойные и продвинутые увеличивались в своем колличестве... :(
     
  10. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    <!--QuoteBegin-Podarochek+24:07:2007, 11:06 -->
    <span class="vbquote">(Podarochek @ 24:07:2007, 11:06 )</span><!--QuoteEBegin-->Дабы такие вопросы больше не появлялись на форумах
    [snapback]73164" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Существует стандартная библиотека С++ (STL), в состав которой входит контейнер vector, поддерживающий динамическое изменение размера

    <!--QuoteBegin-Podarochek+24:07:2007, 11:06 -->
    <span class="vbquote">(Podarochek @ 24:07:2007, 11:06 )</span><!--QuoteEBegin-->всетаки, будут еще предложения?
    [snapback]73164" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Что конкретно тебя не устраивает? Способ передачи параметра или реализация функции?
     
  11. Podarochek

    Podarochek Гость

    <!--QuoteBegin-mms+24:07:2007, 09:46 -->
    <span class="vbquote">(mms @ 24:07:2007, 09:46 )</span><!--QuoteEBegin-->А вообще для добавления каждого элемента создавать новый массив - это жесть.
    [snapback]73155" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    на этапе знаний с вершиной "динамичесих массивов" (не говорим про STL) существует другой способ?
     
  12. BVS

    BVS Гость

    Для: Podarochek
    Перефразирую вопрос: если в функцию передается х, можно ли заменить его на у.
    Ответ: НЕТ. Чтоб поменять переданную переменную нужно передавать не саму переменную, а её адрес.
    PS: Тут тебе mms даже код привел.
     
  13. Podarochek

    Podarochek Гость

    я с кодом полностью согласен и разобрался...
    всем спасибо...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей