{{fbdoc item="title" value="Operator VARPTR (Variable pointer)"}}----
Returns the address of a variable or object

{{fbdoc item="syntax"}}##
	[[KeyPgDeclare|declare]] [[KeyPgOperator|operator]] **Varptr** ( [[KeyPgByref|byref]] //lhs// [[KeyPgAs|as]] //T// ) [[KeyPgAs|as]] //T// [[KeyPgPtr|ptr]]
##
{{fbdoc item="syntax"}}##
	//result// = **Varptr** ( //lhs// )
##
{{fbdoc item="param"}}
	##//lhs//##
		A variable or object.
	##//T//##
		Any data type.

{{fbdoc item="ret"}}
	Returns the address of a variable or object.

{{fbdoc item="desc"}}
	This operator returns the address of its operand.
	
	When the operand is of type ##[[KeyPgString|String]]##, the address of the internal string descriptor is returned. Use ##[[KeyPgOpStrptr|Operator Strptr (String pointer)]]## to retrieve the address of the string data.
	
	The operand cannot be an array, but may be an array element. For example, ##"**Varptr**(myarray(0))"## returns the address of ##"myarray(0)"##.
	
	##[[KeyPgOpAt|Operator @ (Address of)]]##, when used with variables or objects, has identical behavior.

{{fbdoc item="ex"}}
{{fbdoc item="filename" value="examples/manual/operator/varptr.bas"}}%%(freebasic)
Dim a As Integer, addr As Integer
a = 10

'' place the address of a in addr
addr = Cint( VarPtr(a) )

'' change all 4 bytes (size of INTEGER) of a
Poke Integer, addr, -1000 
Print a

'' place the address of a in addr (same as above)
addr = Cint( @a )

'' print the least or most significant byte, depending on the CPU endianess
Print Peek( addr ) 
%%

{{fbdoc item="diff"}}
	- None

{{fbdoc item="see"}}
	- [[ProPgPointers|Pointers]]
	- ##[[KeyPgPoke|Peek]]##
	- ##[[KeyPgPoke|Poke]]##

{{fbdoc item="back" value="CatPgOpPoint|Pointer Operators"}}{{fbdoc item="back" value="CatPgOperators|Operators"}}