ByVal в списке параметров инструкции Declare передает копию
переменной, которая передается в процедуру, (для примера, в sub или function)
, то есть значение переменной.
Это означает, что если передается значение переменной
x , то
исходная переменная
x не будет изменена в любом случае;
Однако, если переменная были передана через
ByRef,
значение исходной переменной
x может быть изменено в
вызываемой функции.
Примечание: для строковых аргументов,
ByVal в настоящее
время имеет другое значение: вместо передачи копии строки, передается
указатель
ZString на строковые
данные, тогда как
ByRef передает
обычную ссылку
String, т.е.
указатель на FreeBASIC строковой дескриптор. Такое поведение позволяет
передавать
ByVal String
непосредственно в процедуры C. Строка, переданная таким образом не должна
быть изменена
Sub/
Function,
так как дескриптор строки не будет обновляться. Смысл передачи
String ByVal
может измениться в будущем; таким образом, передачи
String ByVal
следует избегать.
ZString больше
подходит для передачи строк с завершающимся нулем в функции C.
Противоположность
ByRef.
Ключевое слово
ByVal также используется в контексте
Byref
Параметров и
Результатов функций, где оно может быть использовано для явного
переопределения семантики по ссылке для того, чтобы передать или назначить
указатель, как параметр
Byref или результат функции. Для справки:
См. также