imp@Solbourne.COM (Warner Losh) (01/19/91)
Given something like the following:
struct foo {
void *bar;
};
struct foo fred[] = {
{ (void *) 1},
{ (void *) 3}
};
struct foo george[] = {
{ (void *) "Warner"},
{ (void *) "Losh"}
};
In the program where I see this being done, there is a tag that tells
what type each element of the struct foo is, plus some other
information. What I've presented here are just the basics.
My question is: Is this portable? Can I stuff an integer into a
pointer and expect to get it back out again? I know that there are
problems with going the other way (stuff a pointer into an int and
then try to get it back out).
I couldn't find anything in my K&R II to tell me how kosher this
method is.
Warner
--
Warner Losh imp@Solbourne.COM
We sing about Beauty and we sing about Truth at $10,000 a show.gwyn@smoke.brl.mil (Doug Gwyn) (01/20/91)
In article <1991Jan18.225308.25139@Solbourne.COM> imp@Solbourne.COM (Warner Losh) writes: >My question is: Is this portable? Can I stuff an integer into a >pointer and expect to get it back out again? Any use of void* is not going to work on some pre-ANSI compilers. It is not generally safe to try to convert an arbitary integral value to a pointer. While the implementation much provide SOME integral type capable of holding a (properly converted) object pointer, the converse is not required. (Only for values obtained by starting with a valid pointer.) This is an ideal place to use a union type.