Изучение основ FreeBasic в сравнении с PowerBasic - Basic - Ответ 16495120

Во фрибесике структура — это почти что класс, а переменная — это экземпляр этого класса (объект). Если вы добавляете инициализатор в структуру, то фрибесик сгенерирует конструктор класса (и деструктор), в котором полю Age будет присвоено 35.

В компиляторных потрохах фрибесика тип данных String — это структура следующего устройства:

FreeBASIC:

PureBasicВыделить код

1
2
3
4
5
6
7
8
9
10

Type FBSTRING
    ' Указатель на данные + нулевой символ
    Data As ZString Ptr
 
    ' Длина строки без учёта нулевого символа
    Len As Integer
    
    ' Размер занимаемой памяти
    Size As Integer
End Type

Здесь хранится только указатель, сами данные в другом месте. Когда вы объявляете структуру со строками, компилятор внутри генерирует структуру из структур.

Если посмотреть устройство переменной Vpersons в памяти с динамическими строками, то видно, что до инициализации указатель на равен нулю. После инициализации указатели ссылаются на строки:

Тип String лёгок в использовании, но сослужит плохую службу, когда вам нужно записывать структуру со строками в файл, пробрасывать в другой процесс или передавать по сети. Никаких данных в файле не окажется, только указатели. Вы не сможете из другого процесса получить данные по этим указателям, там они недействительны.

Хрестоматийная лабораторная задача первого семеcтра: «Создайте базу данных типа телефонной книги с именами, фамилиями, номерами телефонов». Задача легко решается записью в файл сразу структурами, однако придётся перейти на строку фиксированной длины.

Если строки сделать фиксированного размера, то все данные Vpersons хранятся внутри:

Совет: не используйте Sleep в нормальных программах, потому что у пользователя возникает ощущение зависшей программы.

Вернуться к обсуждению:

Изучение основ FreeBasic в сравнении с PowerBasic Basic