Strukturen...
-
Hallo zusammen,
ich habe eine Frage zu einem Programm
struct punkt_struct { float x; float y; }; typedef struct punkt_struct punkt; void getPunkte(punkt thePunkte[], int len) { double t=0; for( t = 0.0 ; t < len; t++) { thePunkte[(int)t].x = (float)t; thePunkte[(int)t].y = (float)sin(t*0.1); } } void printPunkte(punkt thePunkte[], int len) { int t=0; for( t = 0 ; t < len; t++) { printf("(x,y)=(%f,%f)\n",thePunkte[t].x ,thePunkte[t].y); } } punkt getGreater(punkt p1, punkt p2) { if (p1.y >= p2.y) { return p1; } return p2; } punkt findMax(punkt thePunkte[], int len) { int t=0; punkt maxValue; maxValue=thePunkte[0]; for( t = 0 ; t < len; t++) { maxValue = getGreater(thePunkte[t],maxValue); //Soll das der Unterprogrammaufruf sein von punkt get creater? warum schreibt //man hier thepunkte und maxValue rein. Ich dachte immer man muss die //Übergabeparameter hineinschreiben: p1 und p2 in meinem Fall? } return maxValue; } void main() { .... }
-
punkt getGreater(punkt p1, punkt p2)
erwartet zwei Parameter vom TYp punkt.thePunkte[t]
ist vom Typ punkt.
maxValue
ist vom Typ punkt.Also ist
maxValue = getGreater(thePunkte[t],maxValue);
richtig.Wo ist das Problem?
-
Beim Aufruf mußt du angeben, mit welchen Werten die Funktion arbeiten soll. Das heißt in deinem Beispiel übergibst du thePunkte[t] und maxValue an die Funktion, die diese dann unter den Namen p1 bzw. p2 ansprechen kann.
-
Danke und warum ändert man da die namen um?
-
Weil du beim Schreiben der Funktion nicht wissen kannst, wer und wo sie später nutzen will. Die Funktionsdeklaration gibt nur an, daß sie zwei
punkt
-Structs entgegennehmen will und der Anwender definiert sich die Variablen und wirft sie in die Funktion rein. (die Namen der Parameter sind nur innerhalb der Funktion relevant)
-
Ok, danke.
Nun hab ich ein Programm mit Zeigern. Eigentlich kann man sgaen das ein Zeiger fast das gleiche ist wie ein Array, oder eine Struktur?
void getPunkte(punkt* thePunkte, int len) { double t=0; for( t = 0.0 ; t < len; t++) { thePunkte->x = (float)t;//thepunkte zeigt auf x / thePunkte.x ist aber fast // das gleiche oder? thePunkte->y = (float)sin(t*0.1+1.4); thePunkte++; } } void printPunkte(punkt thePunkte[], int len) { int t=0; for( t = 0 ; t < len; t++) { printf("(x,y)=(%f,%f)\n",thePunkte[t].x ,thePunkte[t].y); } }
Dann gibts ja noch dieses "&" das wandelt was um, aber weis net genau?
*
Und der * weist hin das es ein Zeiger ist, Also: int *zeiger
-
theguest123 schrieb:
Eigentlich kann man sgaen das ein Zeiger fast das gleiche ist wie ein Array, oder eine Struktur?
Nein.
Ein Zeiger enthält eine Adresse.
Über eine Adresse kannst du auf Objekte (Variablen, Strukturen) im Speicher zugreifen.
Bei einer Variablen ist diese Adresse fest an den Variablennamen gebunden.
Bei einem Zeiger kannst du Adresse ändern und somit auf ander Objekte (des gleichen Typs) zeigen.theguest123 schrieb:
Dann gibts ja noch dieses "&" das wandelt was um, aber weis net genau?
*
Und der * weist hin das es ein Zeiger ist, Also: int *zeigerDas & liefert dir die Adresse von einem Objekt.
Der * ist der Dereferenzierungsoperator. Damit greifst du auf den Inhalt an der Adresse zu.