CONTENTS | PREV | NEXT
4D. unary (SIZEOF ^ {} ++ -- `)
---------------------------------
- SIZEOF <objectident>
simply returns the size of a certain object or CHAR/INT/LONG.
Example: SIZEOF newscreen + SIZEOF INT
- {<var>}
Returns the address of a variable or label. This is the operator
you would use to give a variable as argument to a function by
reference, instead of by value, which is default in E. See "^".
[a bit obsolete for variables. use multiple returnvalues instead]
- ^<var>
[a bit obsolete. you should be using the [] operator or multiple
returnvalues instead]
The counterpart of {}, writes or reads variables that were given by
reference, examples: ^a:=1 b:=^a
it may also be used to plainly "peek" or "poke" LONG values from
memory, if <var> is pointer to such a value.
Example for {} and ^: write your own assignment function;
PROC set(var,exp)
^var:=exp
ENDPROC
and call it with: set({a},1) /* equals a:=1 */
- <varexp>++ and <varexp>--
Increases (++) or decreases (--) the pointer that is denoted by
<varexp> by the size of the data it points to. This has the effect
that that pointer points to the next or previous item. When used
on variables that are not pointers, these will simply be changed
by one. Note that ++ always takes effect _after_ the calculation
of <varexp>, -- always _before_. Examples:
a++ /* return value of a, then increase by one */
sp[]-- /* decrease pointer sp by 4 (if it were an array of long),
and read value pointed at by sp */
Note that this is quite different from C, also, expressions like
p.i++ work on p, not i.
- `<exp>
This is called a quoted expression, from LISP. <exp> is not evaluated,
but instead returns the address of the expression, which can later be
evaluated when required. More on this special feature in chapter 11