arrays and structures in C
Pablo Halpern
pablo at polygen.uucp
Wed Apr 20 08:00:05 AEST 1988
>From article <12983 at brl-adm.ARPA>, by jfjr at mitre-bedford.arpa (Freedman):
> Alternatively you could declare
>
> typedef rather_large_type large_array[some_large_integer];
>
> but I haven't had much luck with malloc(sizeof(large_array))
>
> Now I can do this
>
> typedef struct {
> int dummy_field;
> large_array large;
> } large_structure;
>
> malloc(sizeof(large_structure))
>
> this seems to work and looks more portable than anything else but
> its not pretty. Have I missed something??
Your first alternative:
typedef rather_large_type large_array[some_large_integer];
pointer = (rather_large_type *) malloc(sizeof(large_array));
SHOULD work but doesn't on some compilers which don't understand that
an array is NOT a pointer, an array is CONVERTED to a pointer when
indexed or de-referenced.
Assuming you can't change to a better compiler, I suggest a slight varient
on your second attempt:
typedef struct {
large_array large;
char dummy_field;
} large_structure;
pointer = (rather_large_type *) malloc(sizeof(large_structure));
That way, you can simply say:
pointer[index]
instead of
pointer->large[index]
(Every compiler I know of the address of a struct is the same as the address
of its first element. dpANS requires this.)
However, I don't understand your objection to:
pointer = (rather_large_type *) malloc(some_large_integer *
sizeof(rather_large_type));
Which seems the same to me.
Pablo Halpern | mit-eddie \
Polygen Corp. | princeton \ !polygen!pablo (UUCP)
200 Fifth Ave. | bu-cs /
Waltham, MA 02254 | stellar /
More information about the Comp.lang.c
mailing list