TweakPC

Zurück   Computer Hardware Forum - TweakPC > Games und Software > Programmiersprachen

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13.10.2005, 14:32   #1 (permalink)
Neuling
 

Registriert seit: 13.10.2005
Beiträge: 3

Daiquiri befindet sich auf einem aufstrebenden Ast

Frage 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
Daiquiri ist offline   Mit Zitat antworten
Alt 13.10.2005, 15:21   #2 (permalink)
Inventar 2ter Generation
 
Benutzerbild von Stefan
 

Registriert seit: 01.08.2004
Beiträge: 2.370

Stefan ist ein LichtblickStefan ist ein LichtblickStefan ist ein LichtblickStefan ist ein LichtblickStefan ist ein Lichtblick

Standard AW: Array an main() senden in C

vielleicht das array in ne variable abspeichern und die dann im hauptprogramm abrufen ?
Stefan ist offline   Mit Zitat antworten
Alt 13.10.2005, 17:30   #3 (permalink)
Stickstoff Junkie
 
Benutzerbild von smoek
 

Registriert seit: 26.10.2003
Beiträge: 3.588

smoek sorgt für eine eindrucksvolle Atmosphäresmoek sorgt für eine eindrucksvolle Atmosphäre

Standard 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
Linux is like a tipi: no windows, no gates, apache inside
<< Falls dir der Beitrag gefällt, bewerte ihn bitte (positiv). Dazu den http://forum.tweakpc.de/images/buttons_2/reputation.gif Link am linken unteren Ende des Beitrages benutzen. Thx.
smoek ist offline   Mit Zitat antworten
Alt 13.10.2005, 18:08   #4 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard 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
kerri ist offline   Mit Zitat antworten
Alt 13.10.2005, 22:39   #5 (permalink)
Polsterwaffenkampfsportle r
 
Benutzerbild von tele
 

Registriert seit: 29.10.2003
Beiträge: 14.561

tele hat eine strahlende Zukunft
tele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunfttele hat eine strahlende Zukunft

Standard 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
tele ist offline   Mit Zitat antworten
Alt 13.10.2005, 22:41   #6 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard 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
kerri ist offline   Mit Zitat antworten
Alt 14.10.2005, 07:50   #7 (permalink)
Neuling
 

Registriert seit: 13.10.2005
Beiträge: 3

Daiquiri befindet sich auf einem aufstrebenden Ast

Standard 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
Daiquiri ist offline   Mit Zitat antworten
Alt 14.10.2005, 08:59   #8 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard 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
kerri ist offline   Mit Zitat antworten
Alt 14.10.2005, 10:33   #9 (permalink)
Neuling
 

Registriert seit: 13.10.2005
Beiträge: 3

Daiquiri befindet sich auf einem aufstrebenden Ast

Standard 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
Daiquiri ist offline   Mit Zitat antworten
Alt 14.10.2005, 11:05   #10 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard 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
kerri ist offline   Mit Zitat antworten
Alt 14.10.2005, 15:21   #11 (permalink)
Stickstoff Junkie
 
Benutzerbild von smoek
 

Registriert seit: 26.10.2003
Beiträge: 3.588

smoek sorgt für eine eindrucksvolle Atmosphäresmoek sorgt für eine eindrucksvolle Atmosphäre

Standard 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
smoek ist offline   Mit Zitat antworten
Alt 14.10.2005, 15:29   #12 (permalink)
Die Kerrimaus
 
Benutzerbild von kerri
 

Registriert seit: 17.11.2003
Beiträge: 2.987

kerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz seinkerri kann auf vieles stolz sein

Standard 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
kerri ist offline   Mit Zitat antworten
Alt 25.01.2011, 16:24   #13 (permalink)
Sur3
Gast
 

Beiträge: n/a

Cool AW: Array an main() senden in C

Zitat:
Zitat von kerri Beitrag anzeigen
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
  Mit Zitat antworten
Antwort

Stichworte
array, main, senden


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[NetBeans] Frage zur main-Methode außerhalb der zu testenden Klasse. Greeven Programmiersprachen 1 29.06.2008 15:52
Kann keine Email senden (Routerproblem) andyleery Netzwerk 14 14.09.2007 03:23
HTML Formular an Datei senden GPac Programmiersprachen 3 05.04.2007 14:01
email senden unter mozilla _Smash_ Linux bzw. Non-MS & Programme 8 23.06.2003 22:48
Dokumente DIREKT aus WORD senden io.sys Windows & Programme 3 02.02.2003 18:32


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:05 Uhr.




Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2022, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.
Impressum, Datenschutz Copyright © 1999-2015 TweakPC, Alle Rechte vorbehalten, all rights reserved