[fpc-pascal] pointer arithmetic help required

Martin lazarus at mfriebe.de
Thu Oct 15 15:43:20 CEST 2009


Graeme Geldenhuys wrote:
> By the way, I am reading in the Table of Contents data for an OS/2 INF file.
>
>
>   
>>>   // now increment pEntry to point to next data structure
>>>   // below, .Length is in bytes
>>>   inc( pEntry, pEntry^.Length);
>>>   
>>>       
>> inc(PEntry, 1)
>>
>> since it increments by the size of the type
>>     
>
> No, I don't think that is correct. The data pContentData is pointing at,
> holds various structures of differing sizes. pEntry^.Length says that
> all data relating to one TOC entry is XXX bytes in length. That means
> the TTOCEntryStart structure itself (only 3 bytes) and various other
> structures making up the difference.
>   
If pentry differs in length, then use a byte pointer, (for which inc 
will work in bytes), and cast it onlt when you access the data.

I don't know if you can do it the other way round (eg trick inc to 
belive it's a byte pointer by casting):
 inc(pbyte(pentry), pentry.length); // no idea if that will work, never 
tried

Martin



More information about the fpc-pascal mailing list