OT: Programming in C

Les hlhowell at pacbell.net
Thu Apr 24 05:02:49 UTC 2008


On Mon, 2008-04-21 at 13:01 -0500, Les Mikesell wrote:
> Bill Davidsen wrote:
> > 
> >>>> Quiz for next Friday. What are these and what's the difference 
> >>>> between them:
> >>>>
> >>>> int     (*(**p)[])(int)
> >>> declare p as pointer to pointer to array of pointer to function (int) 
> >>> returning int
> >>>
> >>>> and
> >>>> int     *(*(**p)[])(int)
> >>> declare p as pointer to pointer to array of pointer to function (int) 
> >>> returning pointer to int
> >>>
> >>> I would really want to see both a justification of method and 
> >>> certificate of sanity to someone who actually used either. I can just 
> >>> barely justify pointer to array of function returning int (state 
> >>> machines), these look like something a compiler compiler would do.
> >>
> >> I sort of recall using a pointer to an array of structs as the basic 
> >> data type for anything significant in C but I've mostly forgotten why. 
> >> I think sometimes it had to do with getting usable semantics to access 
> >> things in shared memory segments.
> >>
> > Pointer to struct is the heart of good linked lists, and a pointer to 
> > array of struct is certainly a reasonably use. I certainly use arrays of 
> > pointers to functions, both for state machines and and emulators, after 
> > that it gets very hard to maintain.
> 
> But even if you only need the pointer to function (at first), you can 
> can put it inside a struct and write all the surrounding code to deal 
> with pointers to arrays of struct (even if there is only one...).  I 
> don't think there is any real overhead to doing this and if you start 
> that way you can add elements to the struct when/if you realize you need 
> them without changing the outer loops that handle the pointers or the 
> memory allocation to store them.
> 
I have done this.  But you will discover if you distribute user
available source code that a lot of folks get creeped out when you mix
functions, pointers and data inside a structure.  One quite lovely piece
of code I wrote was taken over by a gentleman who didn't like pointers
(I guess that was his problem), and he rewrote the whole package.  After
that it took 10x as long to execute.

Regards,
Les H




More information about the fedora-list mailing list