Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Blueeyer
12 / 12 / 7
Регистрация: 09.10.2013
Сообщений: 222
1

Изменение размера массива

30.04.2014, 14:44. Просмотров 941. Ответов 8
Метки нет (Все метки)

Допустим в main-е я объявил указатель определенного типа и создал переменную int size, затем адрес указателя и переменной size передаю первую функцию. В ней меняется значение переменной size и объявляется массив динамический массив, адрес которого совпадает с указателем, который я передал. Массив имеет размер size. Всё это возвращается в main, а затем передается в другую функцию, массив очищается (delete [] mass), меняется значение size и объявляется новый массив с большим или меньшим значением, чем был в первой функции, имеющий опять же тот же адрес, что и мой первоначальный указатель.

Не знаю, достаточно ли понятно я всё описал, но можно ли так делать? Грамотно ли это?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2014, 14:44
Ответы с готовыми решениями:

Изменение размера массива
Задача такая: нужно добавить в массив элемент так что бы он стоял в начале массива или...

Изменение размера массива
Подскажите плиз, как на С++ изменить размер массива, есть например int *pi = new int; А...

Изменение размера массива
Здравствуйте. Я хочу написать массив в который записываются введенные данные. Массив должен...

Изменение размера массива
Как без использования функций изменить размер массива? int x=10; int m1; int m2; int m3; iny...

Изменение размера динамического массива
вводится числовой массив неизвестной длинны, каждое число заносится в динамический массив. using...

8
alsav22
5452 / 4847 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 15:00 2
Цитата Сообщение от Blueeyer Посмотреть сообщение
затем адрес указателя и переменной size передаю первую функцию.
Как передаёте?
Цитата Сообщение от Blueeyer Посмотреть сообщение
объявляется массив динамический массив, адрес которого совпадает с указателем, который я передал.
Что значит: "адрес которого совпадает с указателем"?
Цитата Сообщение от Blueeyer Посмотреть сообщение
Всё это возвращается в main
Как возвращается?
Лучше пример кода покажите.
0
Blueeyer
12 / 12 / 7
Регистрация: 09.10.2013
Сообщений: 222
30.04.2014, 16:00  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<iostream>
#include<ctime>
 
using namespace std;
 
void FillMass(float* &mass, int &size);
void ShowMass(float *mass, int size);
void ReFillMass(float* &mass, int &size);
 
int main(){
    float *mass;
    int size = 1;
    FillMass(mass, size);
    ShowMass(mass,size);
    cout << endl;
    ReFillMass(mass, size);
    ShowMass(mass,size);
    cout << endl;
    system("PAUSE");
    return false;
}
 
void FillMass(float* &mass, int &size){
    size = 5;
    mass = new float[size];
    for (unsigned int i = 0; i < size; i++){
        mass[i] = i*10;
    }
}
 
void ShowMass(float *mass, int size){
    for (unsigned int i = 0; i < size; i++){
        cout << mass[i] << " ";
    }
}
 
void ReFillMass(float* &mass, int &size){
    size = 8;
    mass = new float[size];
    for (unsigned int i = 0; i < size; i++){
        mass[i] = i*10;
    }
}

- грамотно ли это? и надо ли в функции ReFillMass() перед объявлением нового массива - освобождать старый?
C++
1
delete [] mass;
0
Ilot
Эксперт С++
1838 / 1195 / 343
Регистрация: 16.05.2013
Сообщений: 3,141
Записей в блоге: 5
Завершенные тесты: 1
30.04.2014, 16:04 4
C++
1
2
3
4
int main(){
    ....
    return false;
}
Для этого есть специальный макрос EXIT_SUCCESS
http://www.cplusplus.com/reference/cstdlib/EXIT_SUCCESS/
Цитата Сообщение от Blueeyer Посмотреть сообщение
и надо ли в функции ReFillMass() перед объявлением нового массива - освобождать старый?
Да.
1
30.04.2014, 16:04
Blueeyer
12 / 12 / 7
Регистрация: 09.10.2013
Сообщений: 222
30.04.2014, 16:07  [ТС] 5
И заметил такую вещь, что если вторая функция будет такой:
C++
1
2
3
4
5
void ReFillMass(float* &mass, int &size){
    for (unsigned int i = 0; i < size; i++){
        mass[i] = i*10;
    }
}
то всё нормально заполняется, хотя массив изначально был объявлен с меньшим размером
0
alsav22
5452 / 4847 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 16:29 6
Цитата Сообщение от Blueeyer Посмотреть сообщение
то всё нормально заполняется, хотя массив изначально был объявлен с меньшим размером
В конце main() сделайте:
C++
1
delete [] mass;
0
Blueeyer
12 / 12 / 7
Регистрация: 09.10.2013
Сообщений: 222
30.04.2014, 17:33  [ТС] 7
так а если после первой функции был создан динамический массив 5 элементов, а после второй - 8 элементов, то не надо ли перед созданием большего массива - удалить предыдущий?

Добавлено через 2 минуты
И вот второй вариант, когда был объявлен массив из 5 элементов, но заполнено от mass[0] до mass[7] - это ведь опасно?
0
alsav22
5452 / 4847 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 17:47 8
Цитата Сообщение от Blueeyer Посмотреть сообщение
так а если после первой функции был создан динамический массив 5 элементов, а после второй - 8 элементов, то не надо ли перед созданием большего массива - удалить предыдущий?
Это разве был ответ не на этот вопрос?
Цитата Сообщение от Ilot Посмотреть сообщение
Да.
Добавлено через 2 минуты
Цитата Сообщение от Blueeyer Посмотреть сообщение
это ведь опасно?
Выход за границу массива, память портится.
1
Blueeyer
12 / 12 / 7
Регистрация: 09.10.2013
Сообщений: 222
30.04.2014, 17:48  [ТС] 9
ой, не заметил изначально, прошу прощения
0
30.04.2014, 17:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 17:48

Рекурсивное изменение размера массива
int* resize_array(int* arr, int count_arr, int i) { if (i &lt; count_arr) { arr =...

Изменение размера массива в конструкторе
Создайте класс matrix полем класса будет массив 10 на 10. Конструктор должен позволять программисту...

Изменение размера динамического массива (resize)
Учусь менять размер динамического массива. Помогите разобраться, пожалуйста. Допустим, есть...


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

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

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