_OFFSET (function)

From QB64 Phoenix Edition Wiki
Revision as of 12:30, 19 April 2022 by SMcNeill (talk | contribs) (Created page with "{{DISPLAYTITLE:_OFFSET (function)}} The _OFFSET function returns the memory offset of/within a given variable. {{PageSyntax}} : {{Parameter|offset%&}} = _OFFSET({{Parameter|variable}}) {{PageDescription}} * The {{Parameter|variable}} parameter can be any type of numerical or string variable name. * API LIBRARY parameter or type names may include '''lp, ptr''' or '''p''' which designates them as a pointer type. * _OFFSET...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

The _OFFSET function returns the memory offset of/within a given variable.


Syntax

offset%& = _OFFSET(variable)


Description

  • The variable parameter can be any type of numerical or string variable name.
  • API LIBRARY parameter or type names may include lp, ptr or p which designates them as a pointer type.
  • _OFFSET function return values should be stored in _OFFSET type variables. As no other variable type is 'elastic' like _OFFSET, there can be no guarantee that any other variable type can hold the value of an _OFFSET.
  • Returns the memory offset of variables, user-defined-types & elements, arrays & indices and the base offset of STRINGs.
  • Offset values are currently only useful when used in conjunction with _MEM or DECLARE LIBRARY procedures.
  • OFFSET values are used as a part of the _MEM variable type in QB64; variable.OFFSET returns or sets the current position in memory.
  • Warning: QB64 variable length strings can move about in memory at any time. If you get the _OFFSET of a variable length sting on one line and use it on the next it may not be there anymore. To be safe, move variable length strings into fixed length strings first.


Examples

Example: Using memcpy with the _OFFSET function values as parameters.

  
DECLARE CUSTOMTYPE LIBRARY
    SUB memcpy (BYVAL dest AS _OFFSET, BYVAL source AS _OFFSET, BYVAL bytes AS LONG)
END DECLARE

a$ = "1234567890"
b$ = "ABCDEFGHIJ"

memcpy _OFFSET(a$) + 5, _OFFSET(b$) + 5, 5
PRINT a$  
12345FGHIJ


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link