|
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 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.