fuzhen said:
what's this?
Checking the subject line, I guess you are referring to this:
p=(char *)malloc((sizeof(float))["\000\006\010\013\015\100"])
to which the answer is that it's a badly written call to malloc. But, given
suitable furniture (a function wrapped around it, <stdlib.h>, etc - and a
semicolon wouldn't go amiss at the end there), it's perfectly legal, provided
sizeof(float) doesn't exceed 6 on the target system. On systems where it
does, the behaviour is undefined.
Let's start off by assuming sizeof(float) is 3 - which is a perfectly legal
value for sizeof(float), and has the merit of being a little unlikely, to say
the least.
Thus, given that assumption, the code reduces to:
p=(char *)malloc((3)["\000\006\010\013\015\100"])
and (3) is just 3, so that gives us:
p=(char *)malloc(3["\000\006\010\013\015\100"])
Now, a[i] and *(a + i) are guaranteed to be equivalent, so let's do some
substituting:
p=(char *)malloc(*(3+"\000\006\010\013\015\100"))
Okay, x+y is the same as y+x, so:
p=(char *)malloc(*("\000\006\010\013\015\100"+3))
and *(a + i) is the same as a[i], so:
p=(char *)malloc("\000\006\010\013\015\100"[3])
Now, "\000\006\010\013\015\100" is an array with values { 0, 6, 8, 11, 13, 64,
0 }, so "\000\006\010\013\015\100"[3] is element 3 of that array: element 0
is 0, element 1 is 6, element 2 is 8, element 3 is 11. So we can substitute
that back in again:
p=(char *)malloc(11)
and finally we can lose the spurious and utterly pointless cast, which gives:
p = malloc(11)
Is that sufficiently simple for you? (Remember to replace 11 with a different
value from the array if sizeof(float) doesn't happen to be 3 on your system.)
--
Richard Heathfield <http://www.cpax.org.uk>
Email: -http://www. +rjh@
Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
"Usenet is a strange place" - dmr 29 July 1999