qb45advr.hlp (Topic list)
DIM Statement Details
  QuickSCREEN      Details      Example      Contents      Index
──────────────────────────────────────────────────────────────────────────────
DIM Statement Details
 
Syntax
  DIM [SHARED] variable[(subscripts)][AS type]
               [,variable[(subscripts)][AS type]...
 
  Argument     Description
  SHARED       The optional SHARED attribute allows all procedures
               in a module to share arrays and simple variables. This
               differs from the SHARED statement, which affects only
               variables within a single SUB or FUNCTION.
 
  variable     A BASIC variable name.
 
  subscripts   The dimensions of the array. Multiple dimensions can be
               declared. The subscript syntax is described below.
 
  AS type      Declares variable to be an elementary or user-defined
               type. The elementary types are INTEGER, LONG, SINGLE,
               DOUBLE, and STRING (variable or fixed).
 
 
Subscripts in DIM statements have the following form:
 
  [lower TO] upper [,[lower TO] upper]...
 
The TO keyword provides a way to indicate both the lower and the upper
bounds of an array's subscripts. The following statements are
equivalent (if there is no OPTION BASE statement):
 
  DIM A(8,3)
  DIM A(0 TO 8, 0 TO 3)
  DIM A(8,0 TO 3)
 
With the TO keyword, you are no longer restricted to positive
subscripts. You can use TO to specify any range of subscripts
from -32,768 to 32,767:
 
  DIM A(-4 TO 10)
  DIM B(-99 TO -5,-3 TO 0)
 
If you use an array in your program without including the array in a
DIM statement, the maximum value of each subscript of the array is 10.
If you use a subscript that is greater than the specified maximum, an
error message appears that says "Subscript out of range."
 
The DIM statement initializes all elements of numeric arrays to zero
and all the elements of string arrays to null strings. The fields of
record variables are initialized to zero, including fixed-string
fields. The maximum number of dimensions allowed in a DIM statement
is 60.
 
If you try to dimension an array variable with a DIM statement
after you have referred to the array, an error message results that
reads "Array already dimensioned." It is good programming
practice to put the required DIM statements at the beginning
of a program, outside of any loops.
 
Static and Dynamic Arrays
 
How you declare an array also determines whether it is $STATIC
(allocated when the program is translated) or $DYNAMIC (allocated
when the program is run).
 
  ■ An array declared first in a COMMON statement is $DYNAMIC.
  ■ Implicitly dimensioned arrays are $STATIC.
  ■ Arrays dimensioned with numeric constants or CONST statement
    constants are $STATIC.
  ■ Arrays dimensioned with variables as subscripts are $DYNAMIC.
 
The following list shows the different combinations and results:
 
  Statement       Result
 
  DIM A(0 TO 9)   The array A is allocated as a $STATIC array if
                  $DYNAMIC is not in effect.
 
  DIM A(MAXDIM)   If MAXDIM is defined in a CONST statement A is a
                  $STATIC array. If MAXDIM is a variable, then the
                  array is a $DYNAMIC array and is only allocated
                  when the program reaches the DIM statement.
 
  Note: If the array size exceeds 64K, if the array is not dynamic,
        and if the /AH option was not used, you may get an error message
        that reads "Subscript out of range" or one that reads "Array
        too big." Reduce the size of the array or make the array dynamic
        and use the /AH command-line option.
 
Type Declarations
 
In addition to declaring the dimensions of an array, the DIM
statement may also be used to declare the type of a variable. For
example, the following statement declares the variable to be an
integer, even though there is no type declaration character or DEFINT
statement:
 
  DIM NumberOfBytes AS INTEGER
 
The DIM statement provides a mechanism for declaring specific
variables to be records. In the following example, the variable
TopCard is declared as a record variable:
 
  TYPE Card
     Suit AS STRING * 9
     Value AS INTEGER
  END TYPE
 
  DIM TopCard AS Card
 
You may also declare arrays of records:
 
  TYPE Card
     Suit AS STRING * 9
     Value AS INTEGER
  END TYPE
 
  DIM Deck(1 TO 52) AS Card
 
Differences from BASICA
 
BASICA executes a DIM statement when it encounters the statement in
the program. The array is only allocated when the statement is
executed, so all arrays in BASICA are dynamic.