powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача параметров по ссылке
13 сообщений из 13, страница 1 из 1
Передача параметров по ссылке
    #35779491
Melissa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста.

Есть подпрограмма. Как я понимаю параметры передаются по ссылке.

Private Sub xxx(a As Integer, b As Integer)
...
a = 10
b = 20

End Sub

В вызывающей программе дело обстоит так:

Dim a, b As Integer

a = 1
b = 2

Call xxx((a),(b))

После вызова подпрограммы значения переменных не изменилось.
Как быть?
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779536
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код в студию целиком.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779551
Melissa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код чего? Вызывающая программа огромна. Код не имеет отношения к делу.
Суть вопроса: как изменить в подпрограмме переменные и отдать их в вызывающую программу.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779592
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну тогда хотя бы вызов подпрограммы, объявление подпрограммы и код, меняющий значения переменных.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779649
FAndrew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Параметры нужно объявить с ByRef.

А вообще хороший тон всегда явно указывать как передается параметр ByVal/ByRef.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779682
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melissa_,
всё верно. Ставя скобки вокруг параметра при вызове процедуры, вы говорите: "вычисли выражение, результат помести во временную переменную, временную переменную передай по ссылке в процедуру, выполни процедуру, уничтожь временную переменную". Как быть - решайте сами.

P.S. Dim a, b As Integer означает Dim a As Variant, b As Integer
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779699
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAndrewПараметры нужно объявить с ByRef.По умолчанию они и есть ByRef.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779761
Melissa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бенедикт,
спасибо! Дело действительно в описании. Если я убирала скобки компилятор ругался.
Получается нельзя описывать переменные через запятую? Это только для Integer или для всех типов?
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779774
Melissa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чушь написала. Все поняла.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35779788
Melissa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще не подскажете как задать значения массива в его описании.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35780228
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melissa_,
значения элементов в описании массива задать нельзя - нет такого синтаксиса. В классическом BASIC-е есть пара операторов DATA/READ:
Код: plaintext
1.
2.
 10  DATA  1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 
 20  FOR I= 1  TO  9 
 30  READ A(I):NEXT I
В VB этих операторов нет, но они легко эмулируются:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
'Модуль
Option Explicit

Private m_Data()
Private m_DataIndex As Long

Public Sub DATA(ParamArray Params())
 Dim I As Long
 Dim lb As Long, ub As Long
 Erase m_Data
 lb = LBound(Params)
 ub = UBound(Params)
 m_DataIndex = lb
 ReDim m_Data(lb To ub)
 For I = lb To ub
    m_Data(I) = Params(I)
 Next I
End Sub

Public Sub READ(Param)
 Param = m_Data(m_DataIndex)
 m_DataIndex = m_DataIndex +  1 
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'Проверка
Public Sub Test()
 Dim I As Long
 Dim A( 1  To  9 ) As Integer
 
 DATA  1 ,  2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,  9 
 For I =  1  To  9 
 READ A(I): Next I
 
 For I =  1  To  9 : Debug.Print A(I);: Next I: Debug.Print
End Sub
Конечно, это вряд ли лучший способ, но при отстутствии языковых средств всё обычно сводится к написанию некой процедуры инициализации, которой надо передать массив и значения его элементов.
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35780576
Melissa_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бенедикт,
спасибо! После ваших ответов (как в присутствии мудреца) вопросы затихают.
Скажите, вы даете столь исчерпывающие ответы только по BASIC-у или с вами можно пообщаться на других языках? И возможно ли в будущем обратиться с вопросом к вам непосредственно?
...
Рейтинг: 0 / 0
Передача параметров по ссылке
    #35783802
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пожалуйста. Я пока не похож на седовласого мудреца ни внутренне, ни внешне :) Надеюсь, Вы понимаете, что форум тем и силён, что представляет разные точки зрения, что кто-то силён в одной области, а кто-то в другой, у кого-то сейчас нет свободного времени и/или желания на ответ, а у кого-то есть, и что большинство участников искренне старается помочь друг другу. Но если возникают вопросы, обсуждение которых, как Вам представляется, не будет иметь ценности для настоящих и будущих участников и читателей форума, можете обращаться ко мне напрямую, адрес в профиле. "На других языках" - это на каких? Например, немецкий и Haskell для меня - тёмный лес .
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Передача параметров по ссылке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]