Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Динамическая память. Указатели. Плизззз...  (Прочитано 5410 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Podarochek
Гость
« : 23-07-2007 21:55 » 

можно ли через функцию изменить адрессацию указателя на память из кучи выделенной в этой же функции.
Есть массив. с помощью пользовательской функции, добавить элемент к массиву.
Решаю так. передача функции указателя на массив,размерность массива и добавляемый элемент. В функции создаю в куче еще один массив, размерность которого больше на один и копирую туда старый массив+элемент. Старый массив удаляю, а возвращаю новый указатель. Вопрос: можно ли изменить адрессацию указателя прямо в функции, а не возвращать указатель? RTFM
Код:
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[i]=_p[i];
}
p[size]=el;
delete[]_p;
size++;
return p;
}
« Последнее редактирование: 24-07-2007 03:21 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 24-07-2007 03:17 » 

Podarochek, можно . Можно передать указатель на твой указатель или ссылку на него. Вот эти два варианта:

1)ссылка на указатель . Параметр функции int*& _p . Тогда в теле функции где угодно можно присвоить новое значение :
Код:
void add_el(int*& _p,int& size, int el)
{
   if(_p)
   {
     delete [] _p;
   }
   _p=new int[7];
}

//вызов
int* MyArray=...;
add_el(MyArray,...,...);

(ссылка - это лишь псевдоним, на самом деле работа идёт с внешним объектом, который был "передан" в аргументах функции)

2)указатель на указатель . Параметр функции int** _p . Тогда в теле функции где угодно можно присвоить новое значение через разыменование * :
Код:
void add_el(int** _p,int& size, int el)
{
   if(*_p)
   {
     delete [] (*_p);
   }
   (*_p)=new int[7];
}

//вызов
int* MyArray=...;
add_el(&MyArray,...,...);
В функцию передаётся адрес переменной int* MyArray , то есть переменная типа int** .
« Последнее редактирование: 24-07-2007 03:20 от Алексей1153++ » Записан

Podarochek
Гость
« Ответ #2 : 24-07-2007 12:49 » 

Спасибо, Алексей1153++ !!!!!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines