Basic Pascal Tutorial/Chapter 1/Variables and Data Types
Sent here from Variables and Data Types.
한국어 · Deutsch · English · Español · Français · Български · Русский · 中文(中国) · 日本語
1D - Variables and Data Types (author: Tao Yue, state: changed)
Variables are similar to constants, but their values can be changed as the program runs. Variables must first be declared in Pascal before they can be used:
var
IdentifierList1 : DataType1;
IdentifierList2 : DataType2;
IdentifierList3 : DataType3;
...IdentifierList is a series of identifiers, separated by commas (,). All identifiers in the list are declared as being of the same data type.
The basic data field data types in Pascal include:
Standard Pascal does not make provision for the string data type, but most modern compilers do. Experienced Pascal programmers also use pointers for dynamic memory allocation, objects for object-oriented programming, and many others, but this gets you started.
More information on Pascal data types:
- The Integer data type can contain whole numbers. the size of an integer depends on the compiler and the processor. On PCs before the 80386, "integer" meant 16-bit whole numbers in the range from
-32768to32767. This is the signed range that can be stored in a 16-bit word, and is a legacy of the era when 16-bit CPUs were common. For backward compatibility purposes, a 32-bit signed integer is a longint and can hold a much greater range of values,2147483647to-2147483648. - The Word data type is a 16-bit unsigned integer, which has a range of
0to65535. - The Real data type has a range from
3.4x10<sup>-38</sup> to3.4x10<sup>38</sup>, in addition to the same range on the negative side. Real values are stored inside the computer similarly to scientific notation, with a mantissa and exponent, with some complications. In Pascal, you can express real values in your code in either fixed-point notation or in scientific notation, with the characterEseparating the mantissa from the exponent. Thus,452.13is the same as4.5213e2 - The Char data type holds characters. Be sure to enclose them in single quotes, like so:
'a' 'B' '+'Standard Pascal uses 8-bit characters, not 16-bits, so Unicode, which is used to represent all the world's language sets in one UNIfied CODE system, is not supported. - The WideChar is a two-byte character (an element of a DBCS: Double Byte Character Set) and can hold a Unicode character. Note: some Unicode characters require two WideChars. See UTF-16.
- Free Pascal supports the Delphi implementation of the PChar data type. PChar is defined as a pointer to a Char type, but allows additional operations. The PChar type can be understood best as the Pascal equivalent of a C-style null-terminated string, i.e. a variable of type PChar is a pointer that points to an array of type Char, which is ended by a null-character (#0). Free Pascal supports initializing of PChar typed constants, or a direct assignment. For example, the following pieces of code are equivalent:
program one;
var P : PChar;
begin
P := 'This is a null-terminated string.';
WriteLn (P);
end.program two;
const P : PChar = 'This is a null-terminated string.';
begin
WriteLn (P);
end.- Free Pascal supports the String type as it is defined in Turbo Pascal: a sequence of characters with an optional size specification. It also supports AnsiStrings (with unlimited length) as in Delphi. And can be declared as:
variable_name : string; // if no length is given, it defaults to 255
variable_name : string[length]; // where: 1 < length <= 255- The predefined type ShortString is defined as a string of size 255.
- AnsiStrings are strings that have no length limit. They are reference counted and are guaranteed to be null terminated. Internally, an ansistring is treated as a pointer: the actual content of the string is stored on the heap, as much memory as needed to store the string content is allocated.
- WideStrings (used to represent unicode character strings) are implemented in much the same way as ansistrings: reference counted, null-terminated arrays, only they are implemented as arrays of
WideCharsinstead of regularChars. - The Boolean data type can have only two values: TRUE and FALSE
An example of declaring several variables is:
var
Age, Year, Grade : integer;
Circumference : real;
LetterGrade : char;
DidYouFail : boolean;From the FPC manual
| Type | Range | Bytes |
|---|---|---|
| Byte | 0 .. 255 | 1 |
| Shortint | -128 .. 127 | 1 |
| Smallint | -32768 .. 32767 | 2 |
| Word | 0 .. 65535 | 2 |
| Integer | smallint or longint | 2 or 4 |
| Cardinal | longword | 4 |
| Longint | -2147483648 .. 2147483647 | 4 |
| Longword | 0..4294967295 | 4 |
| Int64 | -9223372036854775808 .. 9223372036854775807 | 8 |
| QWord | 0 .. 18446744073709551615 | 8 |
integer types
Free Pascal does automatic type conversion in expressions where different kinds of integer types are used.
| Type | Range | Significant digits | Bytes |
|---|---|---|---|
| Real | platform dependent | ??? | 4 or 8 |
| Single | 1.5E-45 .. 3.4E38 | 7-8 | 4 |
| Double | 5.0E-324 .. 1.7E308 | 15-16 | 8 |
| Extended* | 1.9E-4932 .. 1.1E4932 | 19-20 | 10 |
| Comp | -2E64+1 .. 2E63-1 | 19-20 | 8 |
| Currency | -922337203685477.5808 | 922337203685477.5807 | 8 |
real types
- Note that for Windows 64 bits and non-Intel targets Extended is an alias for Double.
| Type | Bytes | Ord(True) |
|---|---|---|
| Boolean | 1 | 1 |
| ByteBool | 1 | Any nonzero value |
| WordBool | 2 | Any nonzero value |
| LongBool | 4 | Any nonzero value |
boolean types
From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 1/Variables and Data Types", as it stood on 2022-08-20 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
