RPG doesn't have a dereferencing operator.  You need to declare a based
variable in order to dereference a pointer.  Pointers in RPG have no data
type and can't be type cast in the conventional sense.  You also need a
based variable in order to define the length and data type of storage that
begins with the address contained in the pointer.  I haven't tried it, but I
believe you can base more than one variable of different data types on a
given pointer and get interesting (and maybe useful) results.

I've been under the impression that pointers in RPG were mainly useful for
API and C library calls, but I could be wrong.  There's also dynamic memory
allocation applications like redimensioning arrays, linked lists, and trees.


> -----Original Message-----
> From: Jim Langston [mailto:jlangston@conexfreight.com]
> Sent: Tuesday, February 29, 2000 3:28 PM
> To: RPG400-L@midrange.com
> Subject: Re: RPG IV Pointers
> 
> 
> MyField, in this case, is also just a pointer?  Something to 
> the effect
> in C of
> *char  MyPointer;
> (Or is that char *MyPointer, I always get those two mixed up).
> 
> From what I understand you as saying... We set up MyPointer as a
> pointer.  In this case to use C terminology, a null pointer.  Then, we
> set up MyField to be a pointer of type char, and, MyField is
> going to "follow" MyPointer.  Wherever MyPointer is pointing to is
> where the data for MyField is going to reside?  So, basically, we are
> saying that wherever MyPointer points at, we can look at it 
> as 50 bytes
> of character.  Very similar, in effect, of a data structure.
> 
> Ahh, okay...  So, we can move our pointer around (MyPointer) to point
> anywhere we want, but can't really access the data it is 
> pointing to.  To
> access that data, we use MyField, which just defines the type 
> of data that
> MyPointer is looking at.
> 
> So, in RPG we can address a pointer either as a pointer (MyPointer) or
> as data (MyField), but not both.  So, we really need two 
> pointers, one to
> move the place it is point to around, and one to actually 
> access the data.
> 
> Is that the way it is?
> 
> Regards,
> 
> Jim Langston
> 
> Joep Beckeringh wrote:
> 
> > Jim,
> >
> > Your first example:
> > > D MyPointer                         S                     
>          *
> > This tells the compiler to define a variable called 
> MyPointer of type
> > pointer.  In other words: storage is allocated, which you 
> can refer to by
> > its name MyPointer.  The RPG compiler is a friendly one and 
> even initializes
> > your variable.  So its initial value is *NULL, in other 
> words it doesn't
> > point anywhere (yet).
> > > D MyField                            S                        50
> > 50 bytes of storage are allocated for your variable MyField.
> > > C                                              Eval     
> MyPointer =
> > %Addr(MyField)
> > The address of the (first of the) 50 bytes you know by the 
> name of MyField
> > is assigned to MyPointer.  Only after an assignment like 
> this is your
> > pointer useable.
> >
> > Your second example:
> > > D MyPointer                         S                     
>          *
> > Same as above.
> > > D MyField                            S                        50
> > Based(MyPointer)
> > No storage is allocated.  You only instruct the compiler to 
> make the 50
> > bytes of storage that MyPointer is going to point to 
> addressable as MyField.
> > You have to assign a pointer value to MyPointer before you 
> can do anything
> > with MyField.
> >
> > Joep Beckeringh
> 
> +---
> | This is the RPG/400 Mailing List!
> | To submit a new message, send your mail to RPG400-L@midrange.com.
> | To subscribe to this list send email to RPG400-L-SUB@midrange.com.
> | To unsubscribe from this list send email to 
> RPG400-L-UNSUB@midrange.com.
> | Questions should be directed to the list owner/operator: 
> david@midrange.com
> +---
> 
+---
| This is the RPG/400 Mailing List!
| To submit a new message, send your mail to RPG400-L@midrange.com.
| To subscribe to this list send email to RPG400-L-SUB@midrange.com.
| To unsubscribe from this list send email to RPG400-L-UNSUB@midrange.com.
| Questions should be directed to the list owner/operator: david@midrange.com
+---


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.