Раздел: Стандартные функции Паскаля
Функция SizeOf
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Функция SizeOf в Паскале определяет и возвращает размер переменной или типа данных. Синтаксис:
function SizeOf(X : TAnyType) : LongInt;
Функция SizeOf возвращает размер переменной или типа данных, в байтах.
Эта функция одинаково работает как в обычном Паскале, так и в Lazarus, Delphi, FreePascal и других реализациях Паскаля.
Функцию SizeOf удобно использовать при определении размера строк, массивов, или при работе с указателями.
Как узнать размер переменной
Чтобы узнать размер переменной, в функцию надо просто передать идентификатор этой переменной. Например:
var i : Integer; M : array[0..15] of word; S : string[10]; begin //Выведет 4 (integer занимает 4 байта) WriteLn('SizeOf(i) = ', SizeOf(i)); //Выведет 32 (word занимает 2 байта) WriteLn('SizeOf(M) = ', SizeOf(M)); //Выведет 11 (в строке есть 0-й символ) WriteLn('SizeOf(S) = ', SizeOf(S)); end.
Обратите внимание на определение размера строки. Мы объявили строку размером в 10 символов, однако функция SizeOf выведет число 11. Потому что функция SizeOf определяет истинный размер строки, то есть количество байтов, которое занимает строка в памяти. Этим данная функция отличается от функции Length, которая определяет количество символов в строке.
Почему 11, а не 10? Дело в том, что в начале каждой строки есть несимвольный элемент, который занимает один байт и содержит размер строки. Подробнее об этом рассказано здесь.
Как узнать размер типа данных
Также просто. Только вместо имени переменной в функцию надо передать имя типа данных. Например:
type TMyRec = record x : word; y : word; z : word; end; begin WriteLn('SizeOf(LongInt) = ', SizeOf(LongInt)); //Выведет 4 WriteLn('SizeOf(Double) = ', SizeOf(Double)); //Выведет 8 WriteLn('SizeOf(TMyRec) = ', SizeOf(TMyRec)); //Выведет 6 end.
Функция SizeOf и указатели
Наиболее часто функция SizeOf используется при работе с указателями и динамическими структурами данных. Потому что при работе со статическими переменными мы и так знаем их размер. Иногда требуется определить размер типа данных, потому что он может отличаться в разных реализациях языка. Но это тоже бывает редко. А вот при работе с динамическими структурами размер данных часто неизвестен, поэтому его приходится определять в программе с помощью таких функций, как SizeOf.
Пример:
type TMas = array[1..8] of integer; var PMas : ^TMas; begin WriteLn('SizeOf(PMas) = ', SizeOf(PMas)); //Выведет 4 WriteLn('SizeOf(PMas^) = ', SizeOf(PMas^)); //Выведет 32 end.
В этом примере мы также можем заранее определить размер блока данных, на который ссылается указатель PMas. Но это лишь демонстрация того, как работает SizeOf с указателями.
Обратите внимание на то, что первый раз выводится размер переменной-указателя. А второй раз - уже размер блока данных, на который ссылается указатель (размер массива TMas).
Более подробно об указателях я рассказал в своей книге Куда указывают указатели.
Ну а то, что будет выведено на экран в итоге работы всех рассмотренных примеров, показано на рисунке:
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |