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

  • Автор темы Podarochek
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

Podarochek

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

Podarochek

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

Podarochek

#4
подробно: :)

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

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;

}
 

Kmet

Java Team
25.05.2006
1 036
8
#5
можно ли изменить адрессацию указателя прямо в функции
это выражение ест мой моск

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

int* add_el(int **_p,int& size, int el)//
 
M
#6
Код:
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;
}
Что-то типа этого видимо :(

А вообще для добавления каждого элемента создавать новый массив - это жесть.
 
04.09.2006
2 566
3
#8
Для: Podarochek
А где здесь ООП? Указатель на указатель это уже ООП? Ну-ну...
 
P

Podarochek

#9
<!--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), спасибо...


всетаки, будут еще предложения? Дабы такие вопросы больше не появлялись на форумах и братья наши "по разуму" - достойные и продвинутые увеличивались в своем колличестве... :(
 
04.09.2006
2 566
3
#10
<!--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]
Что конкретно тебя не устраивает? Способ передачи параметра или реализация функции?
 
P

Podarochek

#11
<!--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) существует другой способ?
 
B
#12
Для: Podarochek
Перефразирую вопрос: если в функцию передается х, можно ли заменить его на у.
Ответ: НЕТ. Чтоб поменять переданную переменную нужно передавать не саму переменную, а её адрес.
PS: Тут тебе mms даже код привел.
 
P

Podarochek

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