![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 29.10.2011
Сообщений: 141
|
![]()
есть динамический массив, который рискует переполниться.
чтобы избежать этого использую незамысловатую операцию: "if ((u-d)<c) { z=z*2 int *te2 = new int[z]; for (int p; p<=z;p++) { te2[p]=te[p]; } delete te; te=te2; )" проблема в том что в основном тексте програамы этот массив te[] называеться term[] а операция выше находиться внутри функции... вопрос как сделать так чтобы term поменял свой адрес в мейне, а не только внутри этой функции.... |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]()
Сделайте массив term[] глобальным. Тогда любая функция сможет менять его размер.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]() Цитата:
В C++ (да и в других языках) при передаче параметра в функцию без дополнительных уточнений, он передаётся "по значению" - то есть, для функции создаётся персональная копия объекта, с которой она может делать всё, что угодно. В случае массива, "объект массива" int* (int[]) - это переменная содержащая адрес начала массива - поэтому Код:
А как поменять сам original? Для этого нужно передать в функцию не значение переменной, а её адрес. В C++ есть два способа для этого. Первый выглядит очень просто: Код:
Но есть второй способ, подчёркивающий, что аргумент передаётся по ссылке и может меняться внутри функции. Код:
|
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
![]() Цитата:
![]()
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 29.10.2011
Сообщений: 141
|
![]()
как же блин все сложно и непонятно((
|
![]() |
![]() |
![]() |
#6 |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]()
Что сложного ? Поставить одну закорючку амперсанд в аргументе функции ? =)
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 29.10.2011
Сообщений: 141
|
![]()
Охохохо) Разыменование) вообще я не понял где вот тут:
Код:
увеличение размера. то ради чего все затевалось( |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]()
До вызова ChangeArray размер массива original был 20. После вызова стал 40, что проиллюстрировано обращением к 34-му элементу.
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 29.10.2011
Сообщений: 141
|
![]() Код:
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]()
Можно. Только нужно изменить само z, а то повторный вызов ChangeArray оставит размер 40, вместо удвоения.
Хотя правильней таскать z вместе с массивом, с глобальными параметрами риск что-нибудь напутать слишком быстро растёт при увеличении объёмов кода (и стоит в программе появиться двум-трём расширяемым массивам, как головная боль при "глобальном" подходе гарантирована). Т.е. в простейшем случае нужно добавить в ChangeArray второй параметр, указатель на длину массива. Там его и менять. Ещё более правильный способ - образовать структуру из массива и его длины и передавать его единым объектом. Но если Вы пока не разбирались со структурами, пока сойдёт и так. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопросы по БД | Rost93 | PHP | 9 | 28.06.2011 22:18 |
Вопросы | BubbleBee | Общие вопросы C/C++ | 2 | 08.06.2011 02:37 |
Вопросы по if, else? | molodoyy | Помощь студентам | 5 | 21.03.2010 15:34 |
Вопросы по if, else? | molodoyy | Общие вопросы C/C++ | 1 | 25.10.2008 18:55 |
вопросы | MAcK | Win Api | 7 | 21.07.2007 18:08 |