2 массива с одним адресом

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

2 массива с одним адресом

Сообщение MIT » 19.02.2009 (Чт) 10:46

Возможно ли такое: иметь 2 массива, ссылающихся на одну и ту же информацию?
Например:
Код: Выделить всё
Arr(99) as integer
ArrB(399) as byte
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: 2 массива с одним адресом

Сообщение Viper » 19.02.2009 (Чт) 10:52

В .NET низзя (стандартными средствами). В VB6 можно.
З.Ы. Можно соорудить класс обертку над указателем на неуправляемую память, но (ИМХО) не стоит это делать.
Весь мир матрица, а мы в нем потоки байтов!

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: 2 массива с одним адресом

Сообщение ANDLL » 19.02.2009 (Чт) 11:40

можно объявить один массив arr(99) as struct
где struct - структура в которой один short и четыре байта в одном месте в памяти
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: 2 массива с одним адресом

Сообщение MIT » 19.02.2009 (Чт) 13:29

ANDLL писал(а):можно объявить один массив arr(99) as struct
Нет, не вариант.

Viper писал(а):В .NET низзя (стандартными средствами).
Значит, что нестандартными можно.

Массив объявлен примерно таким образом:
Код: Выделить всё
Dim gch As GCHandle
Dim arr(99) as integer
gch = GCHandle.Alloc(arr, GCHandleType.Pinned)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: 2 массива с одним адресом

Сообщение Viper » 19.02.2009 (Чт) 16:36

MIT, а какова конечная задача? Потому как ANDLL предлагает вполне подходящий вариант. Массив таких структур будет имитировать массив Byte и массив Short находящихся в одном месте. Чем этот вариант не подходит.
Весь мир матрица, а мы в нем потоки байтов!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: 2 массива с одним адресом

Сообщение MIT » 19.02.2009 (Чт) 18:22

Конечная задача - доступ к данным из разных массивов.
Почему не подходит? Возьмем пример:

Код: Выделить всё
        <StructLayout(LayoutKind.Explicit, Size:=3)> _
        Public Structure SomeStructure
            <FieldOffset(0)> Dim x As Byte
            <FieldOffset(1)> Dim y As Byte
            <FieldOffset(2)> Dim z As Byte
        End Structure

        Dim arr(99) as SomeStructure
        Dim arrB(49) as Short


Информация одна, значит arr(0).x будет равен arrB(0) And &HFF, arr(0).y - arrB(0) >> 8, arr(0).z - arrB(1) And &HFF, arr(1).x - arrB(1) >> 8 и т.д...
Как ни крути - с одной структурой не получиться.
Еще вариант приложения - использование одних и тех же данных в одно- и двухмерных массивах:
Код: Выделить всё
        Dim arr(99) as Short
        Dim arrB(24,3) as Short
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: 2 массива с одним адресом

Сообщение ANDLL » 19.02.2009 (Чт) 20:12

Написанное в последнем сообщении выглядит лишенным смысла
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: 2 массива с одним адресом

Сообщение MIT » 20.02.2009 (Пт) 0:28

Возможно, но это не ответ.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Re: 2 массива с одним адресом

Сообщение Viper » 20.02.2009 (Пт) 8:27

Структура должна иметь следующий вид:
Код: Выделить всё
<StructLayout(LayoutKind.Explicit)> Public Structure Union
    <FieldOffset(0)> Dim b0 As Byte
    <FieldOffset(1)> Dim b1 As Byte
    <FieldOffset(2)> Dim b2 As Byte
    <FieldOffset(3)> Dim b3 As Byte
    <FieldOffset(0)> Dim i As Integer
End Structure
В этом случае 4 байта и Integer будут храниться по одному адресу. Доступ конечно будет более муторным, чем если бы это были два массива с одинм адресом, но тем не менее исходную задачу это решает.
Весь мир матрица, а мы в нем потоки байтов!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: 2 массива с одним адресом

Сообщение MIT » 20.02.2009 (Пт) 22:09

Viper писал(а):Структура должна иметь следующий вид:
Это-то все понятно, но использование структуры надо избежать - необходимо именно два массива.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 94

    TopList