Code: Select all
Text$ = "Hello"
*Text = @Text$
Text.i = @Text$
Debug *Text
Debug Text
*Pointer.String = @*Text
*Pointer2.String = @Text
Debug *Pointer\s
Debug *Pointer2\s
Code: Select all
Text$ = "Hello"
*Text = @Text$
Text.i = @Text$
Debug *Text
Debug Text
*Pointer.String = @*Text
*Pointer2.String = @Text
Debug *Pointer\s
Debug *Pointer2\s
Code: Select all
Pointer.String = @*Text
Code: Select all
Procedure Concat(*Result.String, s1.s, s2.s)
*Result\s = s1 + s2 + Space(50)
ProcedureReturn Len(*Result\s)
EndProcedure
Define r1.String
r1\s = "ByRef"
Debug "Adr to String = " + PeekI(r1)
Len = Concat(r1, "Hello ", "World")
Debug "Adr to String = " + PeekI(r1)
Debug r1\s
Debug PeekS(PeekI(r1))
End
; *this crashed because @r2 is direct a address to a string
Define r2.s
r2 = "ByVal"
Debug "Adr to String = " + @r2
Len = Concat(@r2, "Hello ", "World")
Debug "Adr to String = " + @r2
Debug r2
Debug PeekS(@r2)
Not quite. Only string variables with a fixed length are a pointer direct to the string. String variables without a fixed length are pointers to a pointer showing to the string.mk-soft wrote:A string variable is always a pointer direct to a string.
Code: Select all
Structure CHARARRAY
c.c[0]
EndStructure
Structure MYSTRUC
Dummy.i
String2.s
String3.s{20}
EndStructure
Define MyStruc.MYSTRUC
Define *StrucField1
Define *StrucField2.CHARARRAY
Define *StrucField3.CHARARRAY
*StrucField1 = @MyStruc\Dummy
*StrucField2 = *StrucField1 + SizeOf (Integer)
*StrucField3 = *StrucField2 + SizeOf (Integer)
MyStruc\String2 = "222"
MyStruc\String3 = "333"
;Standard String
*StrucField2 = PeekI (*StrucField2)
Debug "" + Chr (*StrucField2\c[0]) + Chr (*StrucField2\c[1]) + Chr (*StrucField2\c[2])
;Fixlen String
Debug "" + Chr (*StrucField3\c[0]) + Chr (*StrucField3\c[1]) + Chr (*StrucField3\c[2])
Code: Select all
Structure MyStringPointer
s.s
EndStructure
Procedure Concat(*Result.MyStringPointer, s1.s, s2.s)
*Result\s = s1 + s2 + Space(50)
ProcedureReturn Len(*Result\s)
EndProcedure
Define r1.MyStringPointer
r1\s = "ByRef"
Debug "Adr to String = " + PeekI(r1)
Len = Concat(r1, "Hello ", "World")
Debug "Adr to String = " + PeekI(r1)
Debug r1\s
Debug PeekS(PeekI(r1))
The fact that a pointer can be dereferenced has nothing to do with the fact that it has a structure.Demivec wrote:A structured pointer can be dereferenced ...
Example:Josh wrote:The fact that a pointer can be dereferenced has nothing to do with the fact that it has a structure.Demivec wrote:A structured pointer can be dereferenced ...
Code: Select all
Define myInteger = 1234567
Define myIntegerAddr = @myInteger
Define *ptrUnstructured = @myInteger
Define *ptrStructured.Integer = @myInteger
Debug myInteger ;displays 1234567
Debug *ptrStructured\i ;dereferencing is done as an aspect of the pointer's definition
Debug PeekI(myIntegerAddr) ;dereferencing has to be done by using other methods
Debug PeekI(*ptrUnstructured) ;dereferencing is just like any other integer holding an address
Code: Select all
Define myInteger = 1234567
Define myIntegerAddr = @myInteger
Define *ptrUnstructured = @myInteger
Define *ptrStructured.Integer = @myInteger
Debug myInteger ;displays 1234567
Debug *ptrStructured\i ;dereferencing is done as an aspect of the pointer's definition
Debug PeekI(myIntegerAddr) ;dereferencing has to be done by using other methods
Debug PeekI(*ptrUnstructured) ;dereferencing is just like any other integer holding an address
Structure myS
a.i
*p_i.Integer ;<-- * is dropped when dereferencing later within a structure.
pp.d
EndStructure
Define *my1.myS = AllocateMemory(SizeOf(myS))
*my1\p_i = @myInteger
Debug *my1\p_i\i
Define my1.myS
my1\p_i = @myInteger
Debug my1\p_i\i