ftblog

:: widerstand zwecklos ::
email jabber gpgkey
hackergotchi

January 14, 2009

Dereferendingens

Filed under: computer -- 21:15

Als es vor Kurzem im Grundlagen der Informatik Praktikum ums
Dereferenzieren ging und ich dabei war einem Ersti etwas zu erklären, schaute
ein Kollege über meine Schulter und sah das Folgende:

a[2] könnte man auch als *(a + 2) schreiben.


Er meinte:

Weißt du was? *(a + 2) ist ja das gleiche wie *(2 + a)

Ich: "Ja sicher..."
Er: "Und wenn a[2] *(a + 2) ist dann wäre doch logisch, daß *(2 + a) 2[a] ist."

Ich war davon überzeugt, daß er mich auf den Arm nehmen wollte, aber er
bestand darauf, daß das wirklich korrekte Syntax sei.

Ich glaube sowas ja nicht, bevor ich es nicht mit eigenen Augen gesehen hab:

zsh% cat > test.c
#include <stdio.h>

int
main(void)
{
int foo[] = { 11, 22, 33, 44, 55, 66, 77 };
int bar = 5;

printf("Let's expect 66 here: %d\n", bar[foo]);
printf("This actually works with constants, too: %d\n", 2[foo]);

return 0;
}
zsh% gcc -Wall -Wextra -o test ./test.c
zsh% ./test
Let's expect 66 here: 66
This actually works with constants, too: 33


Ich hätte ja nach über 10 Jahren C gedacht, das mir echte Überraschungen nicht
mehr passieren würden, aber hey... Sag niemals nie, was?

[Update]

Ronald macht mich gerade auf ein Posting aufmerksam, in dem er den Sachverhalt
schon mal angesprochen hat.

Sein Blog steckt bei mir im Blogroll und recht weit oben in meinem Feedreader...
Wie konnte mir das Posting denn bitte durch die Lappen gehen? Damit hab ich
einen "Pff, kalter Kaffee." Kommentar verschenkt. Verdammt! :-)

Powered by zblog
valid css | valid xhtml | utf-8 encoded | best viewed with anybrowser