![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 30.07.2011
Сообщений: 2
|
![]()
При написании процедуры для ввода одномерного массива столкнулся с такой проблемой: программа компилируется, но выдает не тот результат, который ожидался.
Код:
------------------------------------------ Введите количество элементов массива: 3 Ввод массива Элемент №1 -> 1 Элемент №2 -> 2 Элемент №3 -> 3 Введенный массив 0 0 0 ------------------------------------------ В общем выводит пустой массив, и все тут... ________ Код нужно оформлять по правилам: тегом [CODE]..[/СODE] (это кнопочка с решёточкой #) Не забывайте об этом! Модератор. Последний раз редактировалось Serge_Bliznykov; 30.07.2011 в 14:59. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
![]()
Массив в процедуру в этом случае надо передавать по ссылке:
Код:
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 30.07.2011
Сообщений: 2
|
![]()
Прик-у РЕСПЕКТ!
Однако хотелось бы узнать, в чем фишка токого подхода к передачи массива в процедуру. Зачем повторно указывать раздел VAR, может и для каждого типа необходмо прописывать отдельное VAR (например procedure prim (var a: integer; var b: real; var c: byte и т.д.)??? |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
![]()
var в нашем случае указание компилятору, что массив передается в виде указателя на него. Без этого служебного слова массив передается целиком - все его значения (собственно, копия массива). При этом изменения в массиве происходят только в локальной его копии и при выходе из процедуры эти значения естественным образом теряются. Нам же надо чтобы изменения были в том массиве, который объявлен "глобально", в модуле. Это можно сделать только если передать ссылку на эту переменную массива, как раз используя слово var.
VAR в параметрах указывается только тогда, когда нужно получить измененное значение этого параметра в вызывающей процедуре. Как, например, значение переменной kol_elem. Если использование измененного значения параметра в вызывающем процедуру коде не предполагается, то и передавать параметр по ссылке нет никакой необходимости. |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 26.04.2008
Сообщений: 2,645
|
![]() Цитата:
2felix800, кстати, при использовании глобальных переменных надо внимательно следить за их областью видимости, иначе можно незаметно ошибиться. |
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
eoln, не надо учить плохому... Учите хорошему - плохому они сами научаться.
Это я про использование глобальных переменных. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Процедура для сортировки массива по возрастанию (прокоментируйте код программы на Delphi) | Natashka Milashka | Помощь студентам | 1 | 20.05.2011 16:20 |
макрос для ввода значений массива в ячейки | Olya1985 | Microsoft Office Excel | 7 | 23.01.2011 19:43 |
Процедура ввода матрицы из файла не работает...( | rudal86 | Помощь студентам | 3 | 20.05.2010 12:24 |
ФАКТ+ФАКТ=НАУКА | Hamond | Общие вопросы Delphi | 5 | 29.04.2010 21:58 |
Необъяснимо, но факт!!! | Tayfun | Свободное общение | 7 | 16.12.2007 10:49 |