Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648

Как обратиться к неиндексированной переменной используя цикл?

15.10.2017, 20:13. Показов 1832. Ответов 23
Метки t4 (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте.
Есть 5 вешественных переменных, одинаково начинающихся и заканчивающихся цифрами 0,1,2,3,4:
VB.NET
1
2
3
4
5
        Dim value0 As Single
        Dim value1 As Single
        Dim value2 As Single
        Dim value3 As Single
        Dim value4 As Single
Нужно обработать их значения в For Next цикле.
Вариант объявления
VB.NET
1
Dim value(5) as Single
это, конечно, оптимальный вариант, но в моём конкретном случае не годится.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.10.2017, 20:13
Ответы с готовыми решениями:

Как обратиться к переменной, если после функции тебе дали строку, с именем переменной
Допустим есть Function Generation():String; там генерируется строка, с именем нашего обьекта(имя объекта мы не знаем которое выпадет). ...

В переменной типа string хранится имя переменной, к которой нужно обратиться. Как это сделать?
Пример: int speed = 10; string s = "speed"; MessageBox.Show(/*как-то обратиться к переменной, чье имя содержится в переменной...

Как подставляя значение переменной к неполному имени переменной обратиться "куда надо"?
Салют, нужно в циклах обращаться к разным переменным ($b1-$b5), но так ручками писать муторно, задумал подставлять к $b($i) значение...

23
 Аватар для jkrnd
179 / 69 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
16.10.2017, 21:33  [ТС]
Студворк — интернет-сервис помощи студентам
OwenGlendower, огромнейшее спасибо!

Добавлено через 3 минуты
OwenGlendower, перепутал флажок "Разрешить отладку неуправляемого кода" с флажком "разрешить небезопасный код"

Добавлено через 17 минут
OwenGlendower,
помогите прокомментировать строку:
C#
1
fixed (void* ptr = buf){}
инструкцию
C#
1
AData* dataPtr = (AData*)ptr;
я понял так: в указатель dataPtr помещается адрес на который указывает указатель ptr. Правильно?
0
 Аватар для Sklifosofsky
1087 / 917 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
16.10.2017, 21:39
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Imports System.Runtime.InteropServices
Public Class Form1
    <StructLayout(LayoutKind.Sequential)> _
    Structure StructValue
        Public value0 As Single
        Public value1 As Single
        Public value2 As Single
        Public value3 As Single
        Public value4 As Single
    End Structure
 
    Dim el(100000) As StructValue
    Dim valResult(100000) As Single
    Dim rsa As New RefStructArr(Of StructValue, Single)(el) 'инициализация спец класса
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        Dim sw As New System.Diagnostics.Stopwatch()
        sw.Start()
 
        'заполнение массива структур для демонстрации работы процедуры Procedure
        For i = 0 To rsa.Count - 1
            rsa(i, 0) = 10.34F
            rsa(i, 1) = 11.34F
            rsa(i, 2) = 12.34F
            rsa(i, 3) = 13.34F
            rsa(i, 4) = 14.34F
        Next
 
        ' вызовы процедуры Procedure и проверка результата её работы:
        Procedure(el, 0)
        Label1.Text = valResult(100000 - 1).ToString
        Procedure(el, 1)
        Label2.Text = valResult(100000 - 1).ToString
        Procedure(el, 2)
        Label3.Text = valResult(100000 - 1).ToString
        Procedure(el, 3)
        Label4.Text = valResult(100000 - 1).ToString
        Procedure(el, 4)
        Label5.Text = valResult(100000 - 1).ToString
 
        sw.Stop()
        Debug.Print(sw.ElapsedMilliseconds)
    End Sub
    Private Sub Procedure(ByRef elem() As StructValue, ByVal n As Integer)
        For i = 0 To rsa.Count - 1
            valResult(i) = rsa(i, n)
        Next
    End Sub
End Class
 
Public Class RefStructArr(Of TStruc, TElem)
    Private _gch As GCHandle
    Private _ptr As IntPtr
    Private _sizeElem As Integer
    Private _sizeStruct As Integer
    Private _arr() As TStruc
 
    Sub New(Arr() As TStruc)
        _arr = Arr
        _gch = GCHandle.Alloc(Arr, GCHandleType.Pinned)
        _ptr = _gch.AddrOfPinnedObject()
 
        _sizeElem = Marshal.SizeOf(GetType(TElem))
        _sizeStruct = Marshal.SizeOf(GetType(TStruc))
 
        If _sizeStruct Mod _sizeElem <> 0 Then
            Throw New ArgumentException()
        End If
    End Sub
 
    Default Public Property Item(Index As Integer, ElementIndex As Integer) As TElem
        Get
            Return CType(Marshal.PtrToStructure(_ptr + Index * _sizeStruct + ElementIndex * _sizeElem, GetType(TElem)), TElem)
        End Get
        Set(value As TElem)
            Marshal.StructureToPtr(value, _ptr + Index * _sizeStruct + ElementIndex * _sizeElem, False)
        End Set
    End Property
 
    Public ReadOnly Property ElementCount As Integer
        Get
            Return _sizeStruct \ _sizeElem
        End Get
    End Property
 
    Public ReadOnly Property Count As Integer
        Get
            Return _arr.Length
        End Get
    End Property
 
    Public Sub Free()
        _gch.Free()
        _arr = Nothing
        _sizeElem = 0
        _sizeStruct = 0
    End Sub
 
End Class
Производительность не внушает, но опять зависит от спроса
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18427 / 14357 / 5372
Регистрация: 17.03.2014
Сообщений: 29,039
Записей в блоге: 1
16.10.2017, 21:41
Цитата Сообщение от jkrnd Посмотреть сообщение
помогите прокомментировать строку:
C#
1
fixed (void* ptr = buf){}
Фиксируем переменную buf в памяти (чтобы сборщик мусора не двигал область памяти во время дефрагментации кучи) и записываем в переменную ptr адрес первого элемента массива.

Цитата Сообщение от jkrnd Посмотреть сообщение
инструкцию
C#
1
AData* dataPtr = (AData*)ptr;
Меняем тип указателя с void* на AData*. Оба указателя указывают на одну и ту же область памяти, но dataPtr имеет конкретный тип и это позволяет применять к нему адресную арифметику. Например, dataPtr++; сдвинет значение указателя dataPtr на количество байтов равное размеру типа AData. Добавление числа - dataPtr += N; - означает движение вперед на N структур AData.
1
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
19.10.2017, 03:12
Вариант.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Imports System.IO
Imports System.Runtime.InteropServices
 
Module Module1
 
    Structure MyData
        Dim Value0 As Single
        Dim Value1 As Single
        Dim Value2 As Single
        Dim Value3 As Single
        Dim Value4 As Single
    End Structure
 
    Sub Main()
        Dim t As MyData
        With t
            .Value0 = 2.0
            .Value2 = 5.1
            .Value4 = 4.0
        End With
 
        ' Структуру в массив
        Dim bytes() As Single = GetSingleBytes(t)
 
        ' Распечатать
        For i As Integer = 0 To bytes.Length - 1
            Console.WriteLine("Value{0} содержит {1}", i, bytes(i))
        Next
    End Sub
 
    Function GetSingleBytes(data As Object) As Single()
        Const SingleVariableLength As Integer = 4
 
        Dim buffer As Single() = New Single(Marshal.SizeOf(data) \ SingleVariableLength - 1) {}
 
        Dim pMem As IntPtr = Marshal.AllocHGlobal(buffer.Length * SingleVariableLength)
 
        Marshal.StructureToPtr(data, pMem, False)
        Marshal.Copy(pMem, buffer, 0, buffer.Length)
 
        Marshal.FreeHGlobal(pMem)
 
        Return buffer
    End Function
 
End Module
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.10.2017, 03:12

Как обратиться к переменной?
Есть сайт, на котором я хочу обратиться к переменной bet_sum Вот начало кода, где содержится эта переменная ;(function($) { var...

Как обратиться к переменной класса?
ситуация public class MyClass { int i1; int i58; int i25; } в основном коде в строковой переменной формируется...

Как обратиться к переменной private
помогите с программой не могу правильно обратиться к привату #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; ...

Как обратиться к переменной в цикле?
вот код: If Drinks.n1 &gt; i1 Then Drinks.n1 = Drinks.n1 - 3 If Drinks.n2 &gt; i1 Then Drinks.n2 = Drinks.n2 - 3 If Drinks.n3 &gt; i1 Then...

Как обратиться к переменной MDIChild
создал класс, объект которого является MDIChild формой: unit NewForm; interface uses Windows, Messages, SysUtils, Variants,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru