address of intermediate members

Shaun Case shaunc at gold.gvg.tek.com
Tue Feb 26 11:35:31 AEST 1991


I know that when you repeatedly access something like

foo.a.b.c.d[11].value

it is better to declare a (register) pointer, assign it the address
of foo.a.b.c.d[11].value, and do manipulations on that, since it
is faster.

However, I am dealing with a heavily nested structure, such as:

struct a {
	struct aa x;
	struct ab y;
	struct ac z;
	} le_struct;

typedef struct aa {
	struct one something;
	struct two nothing;
	struct three everything;
	struct four whatever;
	};


typedef struct one {
	char foo;
	char foo2;
	short blah;
	short blah2;
	};

And...

I want to access the various members of a.x.something (.foo, .foo2,
.blah, .blah2) quickly.  I have a function that I pass a pointer to 
type struct a, thus:

void do_stuff (struct *a ptr)
{}

and what I want to do is something like

register char *fastptr;

fastptr = &(ptr->x.something) 

and then access fastptr->foo, fastptr->foo2, etc.

I can't seem to get it to work.  Is this possible?
Help would be greatly appreciated, since the structure
I am working with is 6 levels deep at some points, and
I have to access every non-char element within it at least
once.  

( I think that from my foggy earlier days, what I am
trying to do is equivalent to Pascal's WITH feature,
in case what I was describing above isn't clear.  It's
been so long since I've used Pascal, tho, that I can
no longer be sure.  Thankfully.  :-)  )

// Shaun //



More information about the Comp.lang.c mailing list