|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
29.10.2011, 10:47 | #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 поменял свой адрес в мейне, а не только внутри этой функции.... |
29.10.2011, 11:15 | #2 |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Сделайте массив term[] глобальным. Тогда любая функция сможет менять его размер.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
29.10.2011, 12:01 | #3 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
В C++ (да и в других языках) при передаче параметра в функцию без дополнительных уточнений, он передаётся "по значению" - то есть, для функции создаётся персональная копия объекта, с которой она может делать всё, что угодно. В случае массива, "объект массива" int* (int[]) - это переменная содержащая адрес начала массива - поэтому Код:
А как поменять сам original? Для этого нужно передать в функцию не значение переменной, а её адрес. В C++ есть два способа для этого. Первый выглядит очень просто: Код:
Но есть второй способ, подчёркивающий, что аргумент передаётся по ссылке и может меняться внутри функции. Код:
|
|
29.10.2011, 13:04 | #4 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 13,543
|
Цитата:
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder |
|
01.11.2011, 12:06 | #5 |
Форумчанин
Регистрация: 29.10.2011
Сообщений: 141
|
как же блин все сложно и непонятно((
|
01.11.2011, 12:41 | #6 |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
Что сложного ? Поставить одну закорючку амперсанд в аргументе функции ? =)
|
01.11.2011, 12:45 | #7 |
Форумчанин
Регистрация: 29.10.2011
Сообщений: 141
|
Охохохо) Разыменование) вообще я не понял где вот тут:
Код:
увеличение размера. то ради чего все затевалось( |
01.11.2011, 12:48 | #8 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
До вызова ChangeArray размер массива original был 20. После вызова стал 40, что проиллюстрировано обращением к 34-му элементу.
|
01.11.2011, 12:53 | #9 |
Форумчанин
Регистрация: 29.10.2011
Сообщений: 141
|
Код:
|
01.11.2011, 13:08 | #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 |