Kurze C++-Frage

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
01101101
Beiträge: 219
Registriert: 06.08.2003 10:53:09
Wohnort: Franken

Kurze C++-Frage

Beitrag von 01101101 » 11.09.2007 16:40:08

Hier sind bestimmt so einige Programmierer unterwegs - ich hätte mal eine kurze Frage an euch:

Mein Programm schaut wie folgt aus:

Code: Alles auswählen

void tralala(???){
     (...)
}

int main(...){
int banane[10];

tralala(???);

}
Die Funktion "tralala" soll Berechnungen an den Einträgen von "banane[10]" vornehmen und die Ergebnisse wieder in banane[10] speichern damit ich die neu berechneten Werte von nun ab weiter verwenden kann.
Könnte mir kurz jemand erklären, was ich für die "???" einsetzen muß um das zu erreichen? Ich erinnere mich noch dunkel an Zeiger und Referenzen und so - aber leider nur ganz dunkel :(

Danke!

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 11.09.2007 17:16:47

Solche Sachen immer in "Softwareentwicklung und -paketierung, Scripting"!

Hier muss Du in der Tat mit Refferenzen arbeiten. Also müsstest Du sowas mit

Code: Alles auswählen

 tralala(&banane); 
aufrufen.
Weis jetzt nicht was Du genau vorhast, aber versuch das mal.

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

Benutzeravatar
armin
Beiträge: 2682
Registriert: 17.03.2005 11:49:14

Re: Kurze C++-Frage

Beitrag von armin » 11.09.2007 17:24:52

Code: Alles auswählen

void tralala(int* trululu){
     (...)
}

int main(...){
int banane[10];

tralala(banane);

}
So sollte es tun.
Bei einer Referenz übergibts du (wenn ich mich gerade nicht sehr irre) nur eine Referenz auf das erste Element von banane, also banano[0].
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 11.09.2007 17:34:10

Oops, ja es ist ein Array, das habe ich zwar gesehen aber irgendwie nicht wahrgenommen. Ja ein Array ist für sich selbst schon eine Refferenz.

Also so machen wie Trigger schreibt.

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

01101101
Beiträge: 219
Registriert: 06.08.2003 10:53:09
Wohnort: Franken

Beitrag von 01101101 » 11.09.2007 17:48:17

Danke, es hat funktioniert.

Ich hielt es für etwas vermessen, das unter "Softwareentwicklung" einzustellen ... aber fürs nächste mal ok ;)


Grüße,
01101101

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 14.09.2007 00:04:21

Das Beispiel von Trigger ist eher C-Code, C++ bietet die Möglichkeit, automatisch Referenzen aufzulösen:

C-Code:

Code: Alles auswählen

void foo(int (*x)[]) // die Klammern sind wichtig, sonst ist x ein Array von int*
{
    (*x)[4] = 42;
}

int x[10];
int main(int argv, char** argc)
{
    foo(&x); // oder auch foo(x), wenn x ein array ist, sind &x und x identisch
    printf("%i\n", x[4]);
    return 0;
}
Um sich die Referenz beim Funktionsaufruf und das Dereferenzieren in der Funktion zu sparen,
kann man dies in C++ auch schreiben als:

Code: Alles auswählen

#include <cstdio> // besser: #include <iostream>
void foo(int (&x)[10]) 
{
    x[4] = 42;
}

int x[10];
int main(int argc, char** argv)
{
    foo(x);
    printf("%i\n", x[4]); // besser: std::cout << x[4] << std::endl;
    return 0; // oder auch return '^'^'^';    :-)
}

Antworten