powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / копирование целых массивов или их фрагментов
3 сообщений из 3, страница 1 из 1
копирование целых массивов или их фрагментов
    #37295633
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, _
ByVal Length As Long)
 
Sub CopyMemory_()
 
'служит для копирования целых массивов или их фрагментов
Dim Arr1!( 1000 ), Arr2!( 2000 ), i%
 
For i =  1  To  1000 
Arr1(i) = i +  0 . 1 
Next
 
'Вместо:
'For i = 1 To 1000
'Arr2(1000 + i) = Arr1(i)
'Next
 
'Использовать:
CopyMemory Arr2( 1001 ), Arr1( 1 ),  1000  *  4 
'
MsgBox ("result =" & Arr2( 1600 )) '
 
End Sub

не пойму из примера, как там из того что сказано вместо ... использовать ...
так получается????
Может кто нибудь закомментировать строку:
CopyMemory Arr2(1001), Arr1(1), 1000 * 4
Спасибо!!
...
Рейтинг: 0 / 0
копирование целых массивов или их фрагментов
    #37295677
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эндрю, здесь надо рассмотреть, о чём вообще рассказывал пример, причем рассмотреть надо ВЕСЬ пример (я его немного видоизменил...). Итак:
Код: plaintext
1.
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, _
ByVal Length As Long)
Без комментариев.

Код: plaintext
Dim Arr1!( 1000 ), Arr2!( 2000 ), i%
Обрати внимание, что массивы заводятся с типом данных Single (! = as Single = 4 байта)

Код: plaintext
1.
2.
For i =  1  To  1000 
    Arr1(i) = i +  0 . 1 
Next
Это просто заполнение Arr1 данными. Тысяча значений типа Single.

Код: plaintext
1.
2.
For i =  1  To  500 
    Arr2( 1000  + i) = Arr1(i)
Next
Здесь стандартный метод для копирования данных - в каждый 1000+i элемент массива Arr2 записывается i элемент массива Arr1. Т.е. Arr2(1001)=Arr1(1),..Arr2(1500)=Arr1(500)

Код: plaintext
CopyMemory Arr2( 1501 ), Arr1( 501 ),  500  *  4 
А теперь мы просто копируем последовательную область памяти. Условия тут таковы:
- при явной типизации массивов Arr1 и Arr2 под них была выделена непрерывная область памяти необходимого размера (Arr1 = 1000*4=4000 байт, Arr2 - в два раза больше)
- соответственно, к любому элементу массива мы можем обратиться просто как к соответствующей ячейке памяти, зная адрес начальной ячейки массива
- ну и, выполняя CopyMemory, мы просто копируем последовательную область длины Length (500 (кличество ячеек) * 4 (размер ячейки)) в адрес в памяти Destination = ссылка на элемент 1501 массива Arr2 (заполняя 2000 байт), из Source = адрес ячейки 501 массива Arr1 (все 2000 байт, начиная с этого адреса)
...
Рейтинг: 0 / 0
копирование целых массивов или их фрагментов
    #37295754
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,
спасибо, всё понятно, а как быть с Стрингом, где сказано расплывчато
1 байт на символ
То есть видимо длину строки * 1 это и будет длина строки а в массиве как считать, счётчик ставить???
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / копирование целых массивов или их фрагментов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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