Zum Inhalt springen

Array von Zeigern


barney_gumble1

Empfohlene Beiträge

Hallo,

ich benötige eine Funktion, die eigentlich zwei Rückgabewerte hat. Natürlich ist das nicht möglich. Stattdessen habe ich mir überlegt Zeiger auf die beiden Rückagebwerte zu setzen und diese in ein Array zu packen und diesen Zeigern als Wert der Funktion zurückgeben. Sprich Zeiger auf Zeiger.

Dazu gibt einiges im Netz, allerdings finde ich keine Lösung meines Problems. Irgendwelche Ideen?

Danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein musst du nicht.

BSP 1:


#include <stdio.h>

int test (int& a)
{
a = 6;
return 0;
}

int main()
{
int i=2;
test(i);
printf ("%i\n",i);

return 0;
}
[/PHP]

BSP 2:

[PHP]
#include <stdio.h>

int test (int* a)
{
*a = 6;
return 0;
}

int main()
{
int i=2;
test(&i);
printf ("%i\n",i);

return 0;
}

Wobei ich das 2te Beispiel besser finde da man im Ersten beim Aufrtuf der Funktion nicht sieht das der Wert verändert werden könnte.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Meinst du als Parameter der Funktion? Dazu müsste ich sie global definieren und dass soll nicht sein. Diese sollen nur nach dem Funktionsaufruf entstehen.

Aber das mit der Struktur hört sich interessant an. Probier ich mal.

wieso global?

hier beispiel:

void test(int &var1, int &var2);

int main()

{

int x;

int y;

test(x,y);

//hier haben die variablen wert 1 und 2

return 0;

}

gruss

void test(int &var1, int &var2)

{

var1 = 1;

var2 = 2;

}

p.s o da war jemand schnella :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um das mal etwas zu verdeutlichen hier ein Beispiel:


#include <stdio.h>
#include <malloc.h>
#include <string.h>

int MakeArray(char ***pZeiger);

int main()
{
char **pTest=0;
MakeArray(&pTest);
strcpy(pTest[2],"Test!");
printf ("%s %s %s\n",pTest[0],pTest[1],pTest[2]);
for (int i=0; i<3; i++)
free(pTest[i]);
free(pTest);
return 0;
}

int MakeArray(char ***pZeiger)
{
(*pZeiger) = (char**) malloc(3*sizeof(char*));

for (int i=0; i<3; i++)
{
(*pZeiger)[i] = (char*) malloc (10*sizeof(char));
}

strcpy((*pZeiger)[0],"Das hier");
strcpy((*pZeiger)[1],"ist ein");
return 0;
}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei genau zwei Rückgabewerten kann man auch mit der Klasse std :: pair arbeiten, um sich den Aufbau eine Struktur zu schenken.

Beim Funktionsaufruf einer Funktion mir void func(int* any) kann auch NULL als parameter übergeben werden. Das muß in der Funktion mit überprüft werden.

Aus dem Grunde bin ich eher für void func(int& any), da hier diese Abfrage in die Compilezeit gelegt wir (Compilefehler) anstatt wärend der Laufzeit passiert (if any == NULL -> return). Den Pointer würde ich bei optionalen Parametern verwenden. Dadurch ergibt sich auch eine andere Lesbarkeit (& - veränderbar, nötig, * - veränderbar optional ... )

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...