Zeiger auf Array mit Zeigern auf Arrays;-)

elfvyn

Mitglied
Hi, ich versuche einen Pointer auf ein Array an eine Funktion zu übergeben.. wobei in der Funktion ein Array angelegt werden soll das Zeiger auf diese Arrays beinhalten soll. Nur ihrgendwie komm ich nicht mehr an mein array ran.... hab schon einiges ausprobiert.. mit arraypointer counten und so aber ohne erfolg.. hier mal etwa das problem. Vielleicht stimmen ja auch die Datentypen nicht....

Code:
void main()
{
    const char *Eintrag0[5]={"Test0","test1","test2","test3","test4"};
    const char *Eintrag1[4]={"Test0","test1","test2","test3"};
    const char *Eintrag1[3]={"Hallo","Bla","Hilfe"};

    ...
    funktion(*Eintrag0, 5);
    funktion(*Eintrag1, 4);
    funktion(*Eintrag1, 3);
    ...
}

    const char *Eintrag[100]; //globales Array mit Pointern auf Arrays

funktion(const char *ArrayEintrag,int laenge)
{
    int index=getIndex()
    /*******************************/

    Eintrag[index]=ArrayEintrag  //Wie findet diese Zuweisung statt?

    /*******************************/
}
 
Zuletzt bearbeitet:
1) der Rückgabetyp von main muss int sein. sowohl in C++, als auch in C. (siehe z.B. hier) In C muss man dann auch einen Integer Wert zurückgeben, bei erfolgreichem Programmablauf 0.

2) in C++ als auch in C99 darfst du den Rückgabetyp einer Funktion nicht auslassen. (In füheren Versionen von C wird übrigens "int" angenommen wenn du das tust, dann fehlt da jedenfalls noch eine "return" Anweisung.)

3) wenn du die Funktion "funktion" aufrufst, solltest du die Arrays nicht dereferenzieren.

4) Arrays sind im Grunde nur Pointer.
Code:
int* x;
int y[5];
x = y;
x[1] = 3;
Das heißt um einen Verweis auf ein Array zu speichern, reicht es aus, das Array (den Pointer) selbst zu Speichern.

5) Bei sovielen Typen und Pointern ist es oft hilfreich "typedef" einzusetzen, sonst sieht ja kein Schwein mehr durch.
Code:
typedef const char* String;
typedef String* StringArray; /* Arrays sind Pointer. */

String Eintrag0[5] = { "Test0","test1","test2","test3","test4" };

StringArray Eintrag[10]; /* Array von Arrays(Pointern) von Strings; */

funktion(Eintrag0, 5);

/*... */

void funktion (StringArray eintrag, int laenge) {
   int index = GetIndex();
   Eintrag[index] = eintrag;
}

6) In deinem Beispiel fehlen ein paar Semikola.
 
also das die main() einen Rückgabetyp braucht halte ich für ein Gerücht, denn wenn man nicht auswerten will, ob die Funktion erfolgreich war, braucht man auch keinen Rückgabetyp....

ich glaube der Aufruf in der main() ist falsch...versuchs mal mit funktion(Eintrag0, 5);
also ohne das Sternchen...und in der funktion() muss die Variable Eintrag[] auch ein Pointer sein...damit über gibst du also der Funktion eine Speicheradresse und weist diese dem Eintrag[] zu...versuchs einfach mal...
 
moin


also das die main() einen Rückgabetyp braucht halte ich für ein Gerücht, denn wenn man nicht auswerten will, ob die Funktion erfolgreich war, braucht man auch keinen Rückgabetyp....
Halte es für ein Gerücht oder lass es sein, aber main sollte wie jede Funktion (außer void, allerdings gibt es in void auch return) ein return erhallten, und jeder einigermaßen guter Compiler gibt dir da ne Warnung aus wenn nicht.


mfg
umbrasaxum
 
@spaxx86: Nochmal zum Thema Gerücht. Es ist definitiv keines. Zitat von der C++ FAQ von B. Stroustrup:

Can I write "void main()"?
The definition

void main() { /* ... */ }

is not and never has been C++, nor has it even been C. See the ISO C++ standard 3.6.1[2] or the ISO C standard 5.1.2.2.1. A conforming implementation accepts

int main() { /* ... */ }

and

int main(int argc, char* argv[]) { /* ... */ }

/Zitat Ende

Du kannst aber auch gerne Google befragen wenn du dem mistraust (das ultimative Kriterium ist allerdings der entsprechende Standard). Wenn du es mal anders gelernt hast, dann lass dir gesagt sein, das "void main( ... )" einfach falsch ist.
 
Es geht nicht um das return. Es geht um den Rückgabetyp von main. Ich habe in dem anderen Thema nur geschrieben, das ich in C++ kein "return 0;" schreibe, da es unnötig ist und automatisch gemacht wird. In C wiederum mache ich es, da es dort notwendig ist.

(obwohl es müßig ist, immer denselben Link zu zitieren) C++ Style and Technique FAQ:

In C++, main() need not contain an explicit return statement. In that case, the value returned is 0, meaning successful execution. For example:

#include<iostream>

int main()
{
std::cout << "This program returns the integer value 0\n";
}
 
Zuletzt bearbeitet:
:-)
spaxx86 hat gesagt.:
also das die main() einen Rückgabetyp braucht halte ich für ein Gerücht, denn wenn man nicht auswerten will, ob die Funktion erfolgreich war, braucht man auch keinen Rückgabetyp....

ich glaube der Aufruf in der main() ist falsch...versuchs mal mit funktion(Eintrag0, 5);
also ohne das Sternchen...und in der funktion() muss die Variable Eintrag[] auch ein Pointer sein...damit über gibst du also der Funktion eine Speicheradresse und weist diese dem Eintrag[] zu...versuchs einfach mal...

hm... main steht MIT Rückgabe im Standard... sodale jetz bin ich auf Argumente gespannt... :rtfm: (oder RTFS in diesem Fall... man sollte mindestens einmal den Standard gelesen haben als Programmierer... das lege ich jedem ans Herz... ehrlich... man programmiert dann einfach anders und nicht mehr so compilerspezifisch... ;-) )

lg
Joe :-)
 
Zuletzt bearbeitet:
Gibt es das Standard-Manual (heheh, welch Wort!) auch online? Also, nur um nicht falsch verstanden zu werden, legal versteht sich.
 
ne gibt es nicht, es gibt einige Drafts (Vorschläge von 1998, aber nicht den Standard-Wortlaut, jedoch zu 80% wahrscheinlich identisch).

auf http://www.iso.org gibts den Standard ISO 9899:1999 auch 2001 und 2004 Errata um 340 CHF --> also nicht billig das Teil
und auf Kopien im Netz sind die ganz schön happig (Klagen etc...)

gute Werke gibts von
P.J. Plauger, ANSI and ISO standard C programmer's reference (1992) Microsoft Press

lg
Johannes
 
Zurück