[ale] This is legal C:
Geoffrey
esoteric at 3times25.net
Thu Feb 12 10:55:33 EST 2004
Bjorn Dittmer-Roche wrote:
> Someone sent me this. It's an interesting oddity. Try it on your
> favorite C compiler!
>
> bjorn
>
> --------------------------------------------------
>
> /* Find the strangeness! Spotted on kuro5hin... */
> #include <stdio.h>
>
> char *foo[] = {"what", "the", "heck", "is", "this"};
>
> int main(int argc, char **argv)
> {
> int j=2;
> printf("Test: %s\n", j[foo]);
> return 0;
> }
In C, j[foo] is the same as *(j + foo). foo alone is the address of the
beginning of the array foo[]. When you add an int to an address, you
actually are doing pointer math, thus you're saying give me the 2 entry
in the array foo[]. That is:
take the address of the beginning of the array: foo
add 2 to it to give me the address of the 3rd item in the array (0,1,2)
The * says, give me the value found at that address point, which happens
to be the string "heck" in the array.
--
Until later, Geoffrey Registered Linux User #108567
Building secure systems inspite of Microsoft
More information about the Ale
mailing list