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