Страница: 1 | 2 |
Вопрос: Вызов функции
Добавлено: 25.02.06 12:59
Автор вопроса: Anton | ICQ: 308496507
Ответы
Всего ответов: 21
Номер ответа: 16
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #16
Добавлено: 03.03.06 16:58
Строка в любом случае передается ByRef (адрес строки): либо адрес самой строки (если было использовано ByRef MyString), либо адрес копии строки (если было использовано ByVal MyString)
Посмотри вот этот пример:
Debug.Print "ByRef passed string " & s & " addr: " & StrPtr(s)
End Sub
Sub ByValSub(ByVal s As String)
Debug.Print "ByVal passed string " & s & " addr: " & StrPtr(s)
End Sub
Private Sub Form_Load()
Dim a As String
a = "MYSTRING"
Debug.Print "The original string " & a & " addr: " & StrPtr
ByRefSub a
ByValSub a
End Sub
и тебе станет все ясно.
Только пожалуйста, не надо уподобляться некоторым товарищам, утверждающим, что передается строка целиком, а не её адрес, а то я совсем разочаруюсь в vb-программерах
Номер ответа: 17
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #17
Добавлено: 03.03.06 17:06
Victor
Твой пример не модифицирует строку при передаче ByVal потому, что модификация (запись в неё слова byval) производится над копией строки, а проверка (модифицирована или нет) производится для оригинала...
Пенка-с...
Номер ответа: 18
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #18
Добавлено: 05.03.06 18:10
Короче. Вы мне внутренности рассказываете. А для программера, не знающего ни капли от внутренностей, это не важно. Ему это внешне как строка, переданная целиком. ByVal и ByRef работают именно так, как и заявлено (внешне): ByRef передает ссылку, ByVal передает копию. Как именно передает - это совсем другой вопрос.
Номер ответа: 19
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #19
Добавлено: 05.03.06 19:42
И тот и другой способ передают ссылку.
Один на оригинал, другой на копию.
А когда "программеру" неважно, что и как происходит, получаются ситуации, когда модифицируется одна строка, а результат модификации проверяется совсем в другой строке.
Номер ответа: 20
Автор ответа:
Anton
ICQ: 308496507
Вопросов: 2
Ответов: 12
Профиль | | #20
Добавлено: 05.03.06 23:09
Это было трудно, но я дочитал все до конца,кое-что даже понял) а вот завтра я иду сдавать надеюсь последний раз...
Номер ответа: 21
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #21
Добавлено: 06.03.06 10:42
Патамушта в газенваген!