|
13.10.2005, 14:32
|
#1 (permalink)
| Neuling
Registriert seit: 13.10.2005
Beiträge: 3
| Array an main() senden in C Moin!
eine kleine Frage die mich hier fast zum durchdrehen bringt:
In meinem Unterprogramm wird ein Array erzeugt. Dieses soll an das main Programm gesendet werden um es dort auszugeben! Wie geht das, ich probiere und lese schon Stunden! Ich lese immer nur Pointer, String, Array, Parameter, aber das ergibt alles keinen Sinn!
Hat nicht jem. ein ganz einfaches Beispiel wie das geht?
Nur ein Array vom Unter ins Main Programm?!?!?!?
Ich bedanke mich jetzt schon mal ... Danke | |
| |
13.10.2005, 15:21
|
#2 (permalink)
| Inventar 2ter Generation
Registriert seit: 01.08.2004
Beiträge: 2.370
| AW: Array an main() senden in C vielleicht das array in ne variable abspeichern und die dann im hauptprogramm abrufen ? | |
| |
13.10.2005, 17:30
|
#3 (permalink)
| Stickstoff Junkie
Registriert seit: 26.10.2003
Beiträge: 3.588
| AW: Array an main() senden in C was meinst du genau mit Unterprogramm? meinst du damit andere Funktionen ?
Ich weiss ja nicht wie komplex du das aufgebaut hast.. ich geh mal von nicht sehr komplex aus, da du ja noch Einsteiger bist.
Die main() wird als erstes ausgeführt und parameterübergrabe dürfte wohl nur durchin der kommandozeile gehen. Anders die anderen Funktionen, die kannst du (zB von der main() aus) aufrufen, und die können mittels return Werte zurückgeben.
Vor der main() kommt nix, also kannst du auch nichts "an die main() übergeben".
So gut kenn ich mich in C zwar nich aus.. aber so Elementarzeugs sollte ich eigentlich können.. müsste schon stimmen
BTW: in C(++) ergibt vieles keinen Sinn wenn du was logisches suchst, nimm Java
stebbi | |
| |
13.10.2005, 18:08
|
#4 (permalink)
| Die Kerrimaus
Registriert seit: 17.11.2003
Beiträge: 2.987
| AW: Array an main() senden in C Zitat:
Zitat von smoek [...]
Vor der main() kommt nix, also kannst du auch nichts "an die main() übergeben".[...] | Um, natuerlich kann man der Main was uebergeben, wenn auch nicht in dem Sinne, in dem es hier vonnoeten waere Jedoch kann man der Main nur Kommandozeilenargumente direkt beim Start uebergeben. Aber das ist fuer das Problem hier voellig unerheblich, ich versuch mal, nen moeglichen Loesungsweg zu erklaeren.
Die Herangehensweise ist verkehrtrum, dreht man die um, klappts auch Das meine ich so: Nicht die Funktion etwas an main() zurueckgeben lassen, aber die main() der Funktion ein leeres Array uebergeben, die dann damit allerhand anstellen kann, z.B. auch Werte da hineinlegen.
Bei Arrays ist die Uebergabe aber leider nicht ganz so einfach, da muss man leider einen Ausflug zu Pointern machen. Ein Array zeichnet sich durch drei grundlegende Eigenschaften aus: der Datentyp (int, float,...) der Elemente, die Adresse des ersten Elements (array[0]) und die Laenge des Arrays. So kann jedes Element des Arrays gefunden werden.
Was Du nun willst, ist, in der main() ein Array der benoetigten Laenge zu erzeugen, und der Unterfunktion sagen, das sie die Werte genau dahin speichern soll. Um das zu Bewerkstelligen, brauchst Du die Speicherposition (=Adresse) des Arrays. Fragen kannst du das erste Element, wo es gespeichert ist, mit & vor dem namen, also etwa &alle_meine_Entchen[0] liefert die Speicheradresse des ersten Elements zurueck. Diese Speicheradressen duerften in etwa so aussehen: 0x89cbd30.
Damit kannst Du natuerlich nicht viel Anfangen, aber die Unterfunktion koennte es. Dazu muss sie aber wissen, das sie eine Adresse beim Aufruf uebergeben bekommt, und keine einfache Zahl. Variablen, in denen Adressen gespeichert werden, initialisiert man daher mit einem vorgestellten Sternchen. Zum Beispiel int *gelbes_entchen; kann eine Adresse speichern, an der eine Integer Zahl liegt. gelbes_entchen ist dann einer dieser ominoesen Pointer - er 'zeigt' auf eine Zahl.
Die Unterfunktion muesstest du also so bauen, das sie einen Pointer uebernimmt, und die Main so, das sie der Unterfunktion eine Adresse uebergibt. Kleines Beispiel zur Veranschaulichung: Code:
int main ()
{
int i;
int MeinArray[42];
printf("Unbearbeitet: "); // das unbearbeitete Array ausgeben
for (i=0;i<42;i++)
{
printf("%d ",MeinArray[i]);
}
printf("\n");
meinefunktion(&MeinArray[0]); // Funktion aufrufen und Adresse des ersten Elements uebergeben
printf("Bearbeitet: "); // das bearbeitete Array ausgeben
for (i=0;i<42;i++)
{
printf("%d ",MeinArray[i]);
}
printf("\n");
return 0;
}
void meinefunktion(int *pMeinArray) // Adresse des ersten Arrayelements entgegennehmen
{
int i;
for (i=0;i<42;i++)
{
pMeinArray[i] = 42 * 23; // das Array belegen
}
}
Was passiert hier: in main() wird ein Array erzeugt, der Funktion meinefunktion() wird gesagt, sie soll da hineinschreiben, und das Array, was eigentlich main() 'gehoert' veraendern. Noch was zur Namensgebung, Du kannst natuerlich einen pointer (nach C Namenskonvention) beliebig benamsen, als der im Beispiel muesste nicht unbedingt pMeinArray heissen, er koennte z.B. auch hintertupfingen heissen - ist aber nicht wirklich praktisch, denn so fehlt jede Zuordnung zum Zweck des Pointers. Pointer mit pName zu benamsen ist recht weit verbreitet.
So, eine Kleinigkeit gibts aber noch zu sagen, bei Arrays gibts noch was ganz praktisches, der Name des Arrays liefert gleichzeitig die Adresse des ersten Elements, also es gilt: MeinArray == &MeinArray[0] Ist natuerlich nun maximal verwirrend, mal mit & und mal ohne, aber das ist einfach nur ne Gewoehnungs/Faulheitsfrage.
Gruesse, kerri
PS.; Ich hoffe, das zusammengeschusterte Proggie oben tut, was es soll, getestet hab ichs nicht | |
| |
13.10.2005, 22:39
|
#5 (permalink)
| Polsterwaffenkampfsportle r
Registriert seit: 29.10.2003
Beiträge: 14.561
| AW: Array an main() senden in C wieso nicht einfach das array als rückgabewert der funktion nehmen? ich meine wenn die funktionsweise von parametern und return werten noch nicht klar ist, finde ich pointer etwas übertrieben | |
| |
13.10.2005, 22:41
|
#6 (permalink)
| Die Kerrimaus
Registriert seit: 17.11.2003
Beiträge: 2.987
| AW: Array an main() senden in C Wenn ich mich recht erinnere, geht genau das in C nicht, deshalb diese ganzen Verbiegungen - ich lass mich aber gerne eines besseren belehren.
Gruesse, kerri | |
| |
14.10.2005, 07:50
|
#7 (permalink)
| Neuling
Registriert seit: 13.10.2005
Beiträge: 3
| AW: Array an main() senden in C WOW, DANKE kerri !!!!
Das ist genau das was ich gesucht habe! Und es funktioniert sogar! Wobei ich daran eigentlich keinen Zweifel hatte!
Wenn ich schon dabei bin, noch ne andere Frage:
Kann ich ein Array ohne weiters auf Gleichheit prüfen?
z.B.:
char array[] = "hallo";
if (array == hallo) { ... };
Das ist jetzt mal ganz simpel dargestellt! Ich könnte wetten dafür muß ich etwas mehr tun!?!
Bis die Tage und ein fantastiggerisches Wohenende | |
| |
14.10.2005, 08:59
|
#8 (permalink)
| Die Kerrimaus
Registriert seit: 17.11.2003
Beiträge: 2.987
| AW: Array an main() senden in C Zitat:
Zitat von Daiquiri [...]
Kann ich ein Array ohne weiters auf Gleichheit prüfen?
z.B.:
char array[] = "hallo";
if (array == hallo) { ... };
Das ist jetzt mal ganz simpel dargestellt! Ich könnte wetten dafür muß ich etwas mehr tun!?!
[...] | Wie Du schon richtig vermutest, ist das nicht soooo einfach. Fuer Zahlenarrays muesstest Du eine for-Schleife darumbauen, die die arrays elementweise vergleicht. Das geht natuerlich nicht fuer Buchstabenketten, deren Laenge Du nicht kennst. Das geht am einfachsten, indem Du <string.h> includest. Da drin stehen einige Funktionen mit denen man allerlei Spass mit Zeichenketten anstellen kann, unter anderem eben auch Vergleiche. Das geht dann mittels strcmp (=STRingCoMParison): Code: #include <stdio.h>
#include <string.h>
int main()
{
char array[] = "hallo";
if ( strcmp (array, "hallo") == 0)
{
printf("yesssss\n");
}
else
{
printf("arrrrrrgh\n");
}
return 0;
} srtcmp liefert 0 zurueck, wenn beide Strings gleich sind, Werte verscheiden von 0, wenn sich die Strings unterscheiden. Was man mit string.h sonst noch alles machen kann, ist hier aufgelistet.
Gruesse, kerri | |
| |
14.10.2005, 10:33
|
#9 (permalink)
| Neuling
Registriert seit: 13.10.2005
Beiträge: 3
| AW: Array an main() senden in C Das ist ne gute Idee von dir!
Leider Arbeite ich hier mit MPLab und dem CX5x Compiler, da gibt es keine "string.h".
Aber ich schaue mal nach ob ich sowas im www finden kann.
Grüße
Matthias | |
| |
14.10.2005, 11:05
|
#10 (permalink)
| Die Kerrimaus
Registriert seit: 17.11.2003
Beiträge: 2.987
| AW: Array an main() senden in C Hmmm.... also man koennte den Vegleich auch von Hand machen, also Element fuer Element - ist aber, wie gesagt, das Problem der unbekannten Laenge - das laesst sich aber abfangen.
Diese Strings (char []) haben am Ende immer das Zeichen '\0' (wird als ein Zeichen gewertet, wie '\n'). Also ein String char MeinString[]="hallo" wird so in einzelne Zeichen zerlegt und im Array gespeichert: 'h', 'a', 'l', 'l', 'o', '\0' Also waere es moeglich, eine while-Schleife zu konstruieren, die, sobald sie das Zeichen '\0' findet, abbricht, etwa so: Code: int i=0;
char MeinArray[] = "hallo";
char AnderesArray[] = "auch hallo";
while (MeinArray[i] != '\0' || AnderesArray[i] != '\0') // Abbruch wenn Stringende eines Arrays gefunden
{
if (verglArr[i]!=array[i])
{
printf ("aaaaaargh!\n");
printf ("Zeichen %d: %c != %c", i, MeinArray[i], AnderesArray[i]);
break; // Schleifen-Abbruch bei Ungleichheit
}
i++; // zaehlvariable eins hochzaehlen
} Faengt allerdings noch nicht ab, das die Strings untershiedlich lang sein koennten, also "hallo" und "hallodriho" wuerden als gleich gewertet, muesste man eventuell noch einbauen: Einfach per while die solange den String durchgehen, bis '\0' gefunden wird, dabei die Anzahl der Zeichen zaehlen, das fuer jeden String machen, und die beiden Ergebnisse vergleichen.
Gruesse, kerri | |
| |
14.10.2005, 15:21
|
#11 (permalink)
| Stickstoff Junkie
Registriert seit: 26.10.2003
Beiträge: 3.588
| AW: Array an main() senden in C @kerri: Zitat:
Zitat von smoek Die main() wird als erstes ausgeführt und parameterübergrabe dürfte wohl nur durchin der kommandozeile gehen. | (Abgesehen von dem Rechtschreibfehler da drin.. )
aber bei dem was du da geschrieben hast steig ich nich mehr durch.. Oo
stebbi | |
| |
14.10.2005, 15:29
|
#12 (permalink)
| Die Kerrimaus
Registriert seit: 17.11.2003
Beiträge: 2.987
| AW: Array an main() senden in C Zitat:
Zitat von smoek @kerri:
(Abgesehen von dem Rechtschreibfehler da drin.. )
aber bei dem was du da geschrieben hast steig ich nich mehr durch.. Oo
stebbi | Argl, sorry, da hab ich malwieder nur die Haelfte gelesen
Ist aber auch nicht wirklich einfach, das Thema. Das muss man ein paar mal gemacht haben, dann erscheints einem voellig natuerlich, wenn auch nicht unbedingt logisch
Gruesse, kerri | |
| |
25.01.2011, 16:24
|
#13 (permalink)
| Gast | AW: Array an main() senden in C Zitat:
Zitat von kerri Code: int i=0;
char MeinArray[] = "hallo";
char AnderesArray[] = "auch hallo";
while (MeinArray[i] != '\0' || AnderesArray[i] != '\0') // Abbruch wenn Stringende eines Arrays gefunden
{
if (verglArr[i]!=array[i])
{
printf ("aaaaaargh!\n");
printf ("Zeichen %d: %c != %c", i, MeinArray[i], AnderesArray[i]);
break; // Schleifen-Abbruch bei Ungleichheit
}
i++; // zaehlvariable eins hochzaehlen
} Faengt allerdings noch nicht ab, das die Strings untershiedlich lang sein koennten | Dann mach aus dem while ein do...while.
PS:
Sry fürs Karteileichenschänden | |
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 Uhr. | | |