Раздел: Стандартные функции Паскаля

Функция SizeOf

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Функция 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).

Более подробно об указателях я рассказал в своей книге Куда указывают указатели.

Ну а то, что будет выведено на экран в итоге работы всех рассмотренных примеров, показано на рисунке:

Как работает SizeOf


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика