Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!ccu.umanitoba.ca!herald.usask.ca!alberta!ubc-cs!uw-beaver!zephyr.ens.tek.com!gvgpsa!gold.gvg.tek.com From: shaunc@gold.gvg.tek.com (Shaun Case) Newsgroups: comp.lang.c Subject: address of intermediate members Message-ID: <1999@gold.gvg.tek.com> Date: 26 Feb 91 00:35:31 GMT Sender: shaunc@gold.gvg.tek.com Organization: Grass Valley Group, Grass Valley, CA Lines: 61 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 //