Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
jon_illien
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78
#1

Динамический массив и указатель на указатель

03.10.2012, 20:12. Просмотров 726. Ответов 3
Метки нет (Все метки)

Спасибо за внимание) Задача такова: нужно удалить элемент по индексу, при этом уменьшить сам массив на 1 (т.е. удалили элемент - уменьшился массив). Помогите!



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int N = 10
    int *a = new int [N];
    int k = 5;
 
        cin >> k;
 
    func(a, N, k);
    
 
void func(int *a, int &n, int k)
{
    int *b = new int [n-1];
    
 
    for(int i=0, j=0; i<n; i++)
    {
        if(i==k)    continue;
        *(b+j++) = *(a+i);
    }
 
    delete []a;         ВОТ ТУТ И ПРОБЛЕМА. 
    *a = *b;            после удаления а, нужно к а приравнять b
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.10.2012, 20:12
Ответы с готовыми решениями:

Реализовать 3 функции, каждая из которых принимает указатель на массив и количество элементов и возвращает указатель на новый массив.
Пишу в Microsoft Visual Studio -&gt;Win32 Console application -&gt;C++....

Динамический массив и указатель
Всем привет. Пытаюсь понять тему динамических массивов. Прошу помочь...

Указатель на динамический массив
Как сделать указатель на размер двухмерного динамического массива? Пробовал int...

Указатель на двухмерный динамический массив
Друзья, нужна Ваша помощь! Создаю одномерный динамический, создаю указатель на...

Классы, указатель на динамический массив
Здравствуйте, Подскажите пожалуйста, в чем моя ошибка, у меня есть класс...

3
doctor_lecter
281 / 154 / 30
Регистрация: 22.09.2012
Сообщений: 283
03.10.2012, 20:17 #2
Вместо *a = *b; надо a=b;

А чтобы вернуть из функции новый массив надо изменить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void func(int **a, int &n, int k)
{
    int *b = new int [n-1];
    
 
    for(int i=0, j=0; i<n; i++)
    {
        if(i==k)    continue;
        *(b+j++) = *((*a)+i);
    }
 
    delete [](*a); 
    *a = b;
}
1
jon_illien
3 / 3 / 1
Регистрация: 14.08.2012
Сообщений: 78
03.10.2012, 20:48  [ТС] #3
спасибо. замечательно. вышло.

Добавлено через 26 минут
Цитата Сообщение от doctor_lecter Посмотреть сообщение
Вместо *a = *b; надо a=b;

А чтобы вернуть из функции новый массив надо изменить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void func(int **a, int &n, int k)
{
    int *b = new int [n-1];
    
 
    for(int i=0, j=0; i<n; i++)
    {
        if(i==k)    continue;
        *(b+j++) = *((*a)+i);
    }
 
    delete [](*a); 
    *a = b;
}
Все таки не недоумеваю, зачем нужен указатель на указатель
0
doctor_lecter
281 / 154 / 30
Регистрация: 22.09.2012
Сообщений: 283
03.10.2012, 20:57 #4
Потому что указатель который передается в функцию и указатель внутри функции это не одно и тоже; и поэтому при изменении значения указателя внутри функции вне функции он не изменится.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2012, 20:57

Умный указатель и динамический массив
Здравствуйте! Есть проблема со следующим заданием. Есть класс умного указателя,...

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как...

Нужно сделать указатель на динамический двумерний массив
Есть динамический массив, псевдо-код: #include &lt;iostream&gt; using namespace...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru