Verständnisfrage
-
Was bedeutet der ausdruck **(a + 1)?
ist das jetzt ein pointer?#include <iostream.h> #include <stdlib.h> #include <stdio.h> int main() { int i, j; float f; float a[2][2] = {{1.,2.}, {3.,4.}}; f = **(a + 1); printf("%f\n", f); system("PAUSE"); return 0; }
-
das ist gewissermaßen schon ein pointer, weil du ja auf arrays mit pointern zugreifen kannst (der name des arrays ist ein zeiger auf sein erstes element: x==&x[0])
im falle eines zweidimensionalen arrays wäre das dann so:
p[12][15] = 26; // so kennt mans ja (p+12)[15] = 26; // equivalent *(*(p+12)+15) = 26; // equivalent
du machst in dem code also letzteres, greifst dadurch dass du f=*(*a+1) schreibst, auf das element a[1][0] zu und weist f den wert zu...
-
[EDIT] Ich komm immer zu spät... [/EDIT]
Hinweis: Lass die Endungen bei den Includes weg und nimm stattdessen "using namespace std;" oder schreib immer "std::" vor Sachen aus der Bibliothek.
Und system() wird auch nicht gern gesehen. Mehr dazu steht in der FAQ.
-
cme386: wenn du dich austoben willst, beantworte doch meine frage ein paar threads drunter
-
ich bin noch nicht ganz dahintergestiegen
kann man den ausdruck **(a+1) auch als pointer auf einen pointer interpretieren?
oder ist nur einer der beiden Sterne ein hinweis auf einen pointer und der andere --- tja keine ahnung --- irgendein anderer unärer operator?also ich möchte mal anders fragen:
warum zwei sterne? und was würde der ausdruck bedeuten wenn nur ein stern davor stehen würde? müsste man bei dreidimensionalen vektoren mit drei sternen arbeiten?
-
*moon* hat die Loesung doch schon gesagt:
*a == *(a+0) == a[0]
*(a+1) == a[1]
**a == a[0][0]
**(a+1) == a[1][0]
((a+1)+1) == a[1][1]Lies dir dazu auch mal http://pweb.netcom.com/~tjensen/ptr/pointers.htm durch
-
vielen Dank *moon*
habe gerade ein paar varianten ausprobiert und habs (denke ich mal) kapiert!