byval



Byref

Автор Денис Нагибин задал вопрос в разделе Другие языки и технологии

records и ByVal в VB и получил лучший ответ

Ответ от Ѓдачник[гуру]
ByVal это передача параметра по значению, а ByRef по ссылке.
ByVal приводит к тому, что для вводимой за ним переменной при вызове процедуры создаётся копия, которая исчезает по окончании работы процедуры и никак не может повлиять на значение переменной, для которой эта копия создаётся.
Для переменной ByRef (даётся по умолчанию) копия не создаётся. Значение переменной ByRef процедура может изменить, а значение переменной ByVal – нет.
Теперь по-русски. У тебя есть переменная index, которая определена где-то за пределами подпрограммы FillQuestion, и когда ты ее вызываешь из основной программы, ты пишешь: Call FillQuestion (quest, records, index)
Когда выполнение программы переходит к выполнению подпрограммы, оно встречает префикс ByVal index в заголовке.
При этом переменные quest и records задаются по умолчанию с префиксом ByRef, а index - с префиксом ByVal.
Это значит, что если переменная quest или records будет изменена внутри подпрограммы, то она так и останется измененной, когда выполнение вернется к основной программе, а переменная index при входе в подпрограмму копируется как-бы в другую переменную с тем же именем index, и с тем же старым значением, поэтому она может быть изменена сколько угодно, а при возврате в основную программу эта как-бы переменная стирается, и имя index возвращается к основной переменной и получает старое значение.
Теперь про records. Но здесь я уже менее уверен.
В заголовке подпрограммы FillQuestion (quest As Question, records As Variant, ByVal index As Integer)
ты задаешь переменную quest типа Question, который ты сам же и определил, переменную records типа Variant, то есть самонастраивающийся и переменную index типа Integer, то есть целое число.
Тип Variant означает то, что реальный тип переменной будет такой, какой ты задашь при первом обращении к переменной.
То есть, если ты напишешь records = 5, то records станет типа Integer, а если напишешь records = "Вася", то типа String.
Тип Question мы определяем самостоятельно как список переменных: Count типа целое, AnswerType типа целое, Text типа строка, Answers(0 To 3) - одномерный массив из 4 элементов типа строка, AnswerCode типа строка.
Records, как я понял - это массив, члены которого имеют разные типы.
В подпрограмме мы задаем, что Count - это число, равное значению records(0,index), AnswerType - это число, равное значению records(1,index), Text - это строка, равная значению records(2,index).
Вроде бы так.

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: records и ByVal в VB
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*