liste[10] == 10[liste] ????????????????????????
-
ich hab folgenden Source
{ int liste[4]; liste[0] = 1; }
und ein Kollege hat mir gesagt, dass das auch so geht:
{ int liste[4]; 0[liste] = 1; }
nur, meine Frage ist Warum???????
-
Deine Fragezeichentaste klemmt
-
a[b] => *(a + b) => *(b + a) => b[a]
-
Habe es bis eben auch nicht gewusst, aber mein Compiler schluckt es anstandslos.
Zur Erklärung, das ist einfach von dem Komitee so festgelegt worden, als die
Sprache standardisiert wurde, das hat nichts mit sinn oder unsinn zu tun, ist
eben einfach ne alternative Schreibweise.
-
a[b] => *(a + b) => *(b + a) => b[a]
versteh ich nicht ganz
wenn ich Variablen richtig verstanden habe, müsste das doch so übersetzt werden:a[b] -> *(&a + (sizeof(int) * b)) womit das dann nicht mehr das selbe wäre!
-
gast schrieb:
a[b] -> *(&a + (sizeof(int) * b))
Nein - du hast Zeiger nicht verstanden.
Was passiert beiint arr[]={0,1,2,3,4,5};
int* p=arr;
p=p+1;
printf("%d\n", *p);?
-
das mag ja alles möglich sein, aber trotzdem ist liste immer noch der name des arrays, das wird... "verschleiert", wenn man es andersrum schreibt. und ich glaube nicht daß man im fall des falls dann einer funktion die 10 als namen übergeben will....
-
scrub schrieb:
das mag ja alles möglich sein, aber trotzdem ist liste immer noch der name des arrays, das wird... "verschleiert", wenn man es andersrum schreibt. und ich glaube nicht daß man im fall des falls dann einer funktion die 10 als namen übergeben will....
kapier nicht was du meinst
Daniel E. hat die Erklaerung gepostet, wenn du was nicht verstehst, dann frag
-
Ist doch ganz einfach, es wird zu einem Pointer ein Offset hinzuaddiert und laut
dem Kommutativgesetz ist es egal ob man schreibt 3 + 4 oder 4 + 3
das Ergebnis ist in beiden Fällen die 7.
Das gleiche geschieht oben.
-
is doch klar was ich meine.
int arr[10]
hier ist arr der name eines arrays von zehn elementen des typs integer (dabei fällt mir auf daß man zb schonmal nicht int 10[arr] schreiben könnte!).
ich habe mich (also eigentlich auch alle hier) gefragt, ob es vielleicht einen kontext gibt (wie zb den obigen), wo man diese kommutativität nicht verwenden darf...
-
Ein int array[10]; ist die Deklaration einer Variablen, ein 10[array] ist die Berechnung
einer Adresse und anschließendem dereferenzieren