for Schleife mit Zeigern

JoeBloggs

Mitglied
Hallo,

ich benötige eventuell ein kleines Update
die folgende methode bekommt 4 Werte übergeben.
int finde, zu findende zahl
int *pfeld, feld in dem gesucht werden soll
int zaehler, länge des feldes
int *pa Zeiger auf zu startendes feld

In der eigentlichen for schleife so so weit wie möglich nur mit zeigern gearbeitet werden.

Daher meine Frage, kann ich pfeld+zaehler auch irgendwie nur über Zeiger ausdrücken?

Code:
  	int* suche(int finde, int *pfeld, int zaehler, int *pa){
  
 	 int *pfund;			 //ArbeitsZeiger
  	  bool gefunden = false;
  	  i=0;
  
  	  //Stellt sicher dass vorn angefangen wird
  	  if (pa == NULL) {
  		  pa = pfeld;
  	  }
  
  		  for(*pr=*pa; pr<=pfeld+zaehler; pr++){
 			 //cout <<"\n "<< i <<" "<< *pr;
  		   i++;
  		   if(*pr == finde){
  			   gefunden = true;
  			   pfund = pr;
  		   }
  	   }
  
  	  if(gefunden){
  		  return pfund;
  		}
  	   else{
  		   return NULL;
  	  }
  	}

Besten Dank
Markus
 
Hi, ich verstehe nicht ganz was du meinst,
die Abfrage pfeld + zaehler ist doch schon Zeigerarithemtik.

Im übrigen tuts deine Funktion nicht so ganz was sie tun sollte da deine Schleifen-
bedingungen falsch Formuliert sind.
*pr=*pa hier wird der Inhalt zugewiesen und dann überprüfst du im Abbruchkriterium auf
die Zeiger. Das geht so nicht.

Besser wäre:

Code:
for(int* pr=pa; pr < pfeld+zaehler; pr++)


Gruß

RedWing
 
Hallo RedWing,

ich habe vergessen zu erwähnen, dass ich den zeiger *pr global instanziert habe.
Die Schleife arbeitet bei mir auch wunderbar.

Mit *pr=*pa möchte ich ja nur den Startpunkt im Feld festlegen.
Mir geht es in erster Linie das Abbruchkriterium komplett in Zeigern auszudrücken, ist das irgendwie möglich?

Gruß
Markus
 
ich habe vergessen zu erwähnen, dass ich den zeiger *pr global instanziert habe.
Die Schleife arbeitet bei mir auch wunderbar.
Wichtig ist auf welche Speicherzelle der Zeiger zeigt:

Mit *pr=*pa möchte ich ja nur den Startpunkt im Feld festlegen.
Mir geht es in erster Linie das Abbruchkriterium komplett in Zeigern auszudrücken, ist das irgendwie möglich?

Eben den Startpunkt im Feld tust du damit nicht festlegen sondern du weißt pr den Inhalt von pa
an der aktuellen Stelle zu und danach in deinem Abbruchkriterium überprüfst du ob der
Zeiger pr schon am Ende von pfeld angekommen ist.
Es kann aber sein das der Zeiger pr bei deiner globalen Instanziierung irgendwo steht.
Und der Zeiger pa steht anderswo. Und mit *pr = *pa weißt du den Zeiger pa nicht auf den
Zeiger pr zu sondern weißt nur ihre Inhalte zu. Das kann so nicht gehen und das kannst
du dir auch gleich sparen...

Und das Abbruchkriterium ist schon eine Zeigerarithmetik du addierst auf eine Addresse einen
offset namens Zaehler.
Aber du solltest dir das nochmal genau angucken, weil so wies da steht ist es nicht ganz
richtig...

//edit
Versuch mal der Funktion eine andre Startaddresse mitzugeben und du wirst sehen,
wenn du nach einem Element suchst was unterhalb dieser Addresse liegt, wirst du
es trotzdem finden...
Ausserdem greifst du mit deiner for Schleife über den Speicher hinaus...

Gruß

RedWing
 
Zuletzt bearbeitet:
moin


Gehört nciht ganz zum Thema aber du hast, wenn ich das richtig sehe, ne geschlossene Klammer zu viel, was dazu führen wird das deine Funktion nur "halb" da ist.


mfg
umbrasaxum
 
Zuletzt bearbeitet:
Zurück