Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
#1

Изменение размера массива - C++

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

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

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

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

Изменение размера массива - C++
Как без использования функций изменить размер массива? int x=10; int m1; int m2; int m3; iny k = 0; for (int i = 0; i < x: i...

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

Изменение размера динамического массива - C++
вводится числовой массив неизвестной длинны, каждое число заносится в динамический массив. using namespace std; int main() { ...

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 15:00     Изменение размера массива #2
Цитата Сообщение от Blueeyer Посмотреть сообщение
затем адрес указателя и переменной size передаю первую функцию.
Как передаёте?
Цитата Сообщение от Blueeyer Посмотреть сообщение
объявляется массив динамический массив, адрес которого совпадает с указателем, который я передал.
Что значит: "адрес которого совпадает с указателем"?
Цитата Сообщение от Blueeyer Посмотреть сообщение
Всё это возвращается в main
Как возвращается?
Лучше пример кода покажите.
Blueeyer
12 / 12 / 1
Регистрация: 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;
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
30.04.2014, 16:04     Изменение размера массива #4
C++
1
2
3
4
int main(){
    ....
    return false;
}
Для этого есть специальный макрос EXIT_SUCCESS
http://www.cplusplus.com/reference/c.../EXIT_SUCCESS/
Цитата Сообщение от Blueeyer Посмотреть сообщение
и надо ли в функции ReFillMass() перед объявлением нового массива - освобождать старый?
Да.
Blueeyer
12 / 12 / 1
Регистрация: 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;
    }
}
то всё нормально заполняется, хотя массив изначально был объявлен с меньшим размером
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.04.2014, 16:29     Изменение размера массива #6
Цитата Сообщение от Blueeyer Посмотреть сообщение
то всё нормально заполняется, хотя массив изначально был объявлен с меньшим размером
В конце main() сделайте:
C++
1
delete [] mass;
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
30.04.2014, 17:33  [ТС]     Изменение размера массива #7
так а если после первой функции был создан динамический массив 5 элементов, а после второй - 8 элементов, то не надо ли перед созданием большего массива - удалить предыдущий?

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

Изменение размера динамического массива объектов класса - C++
Всех приветствую! Нужно изменить размер динамического массива, в котором я храню созданные объекты. Делаю это так: Car *spis_temp =...

Изменение размера матрицы - C++
столкнулся с проблемой: vectorB(7,&quot;-&quot;); vector&lt;vector&gt;A(7,B); //так задаю массив размером 7*7 нужно изменить кол-во столбцов т. е....

Изменение размера строки - C++
На сколько я помню изменить размер строки можно при помощи библиотечной функции resize(); , но, я не помню как она реализуется. Вроде...

Изменение размера изображения - C++
Всем привет! Помогите написать скрипт изменения размера изображения. Скрипт создания скриншота import System.IO; // increment...


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

Или воспользуйтесь поиском по форуму:
Blueeyer
12 / 12 / 1
Регистрация: 09.10.2013
Сообщений: 222
30.04.2014, 17:48  [ТС]     Изменение размера массива #9
ой, не заметил изначально, прошу прощения
Yandex
Объявления
30.04.2014, 17:48     Изменение размера массива
Ответ Создать тему
Опции темы

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