INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Arraygröße herausfinden
27.04.2015, 11:36 (Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2015 12:16 von scritch.)
Beitrag #1
Arraygröße herausfinden
Hallo miteinander. Angenommen ich definiere ein Array mit 10 Einträge. Quasi so:

int aArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

ist es möglich, an einer anderen Stelle des Codes die Größe des Arrays "aArray" herauszufinden, sodass ich die Arraygröße später in einem Code in eine Variable speichern kann?

Edit: Kann ich die Größe eines Arrays später im Code noch ändern? Und auch den Inhalt des Arrays?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.04.2015, 13:45
Beitrag #2
RE: Arraygröße herausfinden
(27.04.2015 11:36)scritch schrieb:  ist es möglich, an einer anderen Stelle des Codes die Größe des Arrays "aArray" herauszufinden, sodass ich die Arraygröße später in einem Code in eine Variable speichern kann?
Nein, das geht in C(++) aus prinzipiellen Gruenden nicht. Das Ende des Arrays oder die Laenge wird nirgends gespeichert, wenn Du es nicht selbst tust. Du musst also selbst eine entsprechende Variable anlegen.

Zitat:Edit: Kann ich die Größe eines Arrays später im Code noch ändern? Und auch den Inhalt des Arrays?
Den Inhalt schon, das ist ja ganz normales Coding: aArray[5] = 42; setzt das sechste (!) Element auf 42.
Die Groesse kannst Du nachtraeglich nicht aendern. Du kannst aber statt eines Arrays einen Zeiger nehmen und dann per malloc() einen Speicherbereich reservieren. Den kannst Du dann spaeter mit free() wieder "zurueckgeben" und einen neuen Speicherbereich mit anderer Groesse anfordern.
Gruss,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.04.2015, 17:52 (Dieser Beitrag wurde zuletzt bearbeitet: 27.04.2015 18:03 von scritch.)
Beitrag #3
RE: Arraygröße herausfinden
Okay, danke. Das schaue ich mir mal an. Ich scheitere gerade noch an einer anderen Sache. Kann ich die Größe eines Array per Variable definieren? Z. B. so:

xxx arraylaenge = 3;
char aArray[arraylaenge] = {1, 2, 3};

Kann ich ein Array ohne bestimmte Länge definieren?

Edit: Ja, kann ich. Wie würdesich denn sowas verhalten, wenn ich die Arrayeinträge z. B. in einer for-Schleife verarbeiten wollen würde?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.04.2015, 18:26
Beitrag #4
RE: Arraygröße herausfinden
Mit sizeof() kannst du die array Größe rausfinden.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.04.2015, 11:28 (Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 11:31 von Thorsten Pferdekämper.)
Beitrag #5
RE: Arraygröße herausfinden
(27.04.2015 17:52)scritch schrieb:  Kann ich die Größe eines Array per Variable definieren? Z. B. so:

xxx arraylaenge = 3;
char aArray[arraylaenge] = {1, 2, 3};
Ohne das jetzt ausprobiert zu haben, glaube ich nicht, dass das in der Art geht. Zumindest nicht so, dass es wirklich flexibel ist.

Zitat:Kann ich ein Array ohne bestimmte Länge definieren?
Deklarieren kannst Du sowas wahrscheinlich schon, z.B. als Funktionsparameter, aber nicht definieren.

Zitat:Edit: Ja, kann ich. Wie würdesich denn sowas verhalten, wenn ich die Arrayeinträge z. B. in einer for-Schleife verarbeiten wollen würde?
In der for-Schleife wuerdest Du nicht wirklich wissen, wie lange das Array ist. Dadurch wuerdest Du Gefahr laufen, irgendeine Sauerei im Speicher anzurichten.

Vielleicht waere es hilfreich, wenn Du uns mal sagen wuerdest, was Du eigentlich vorhast. Vielleicht kann man dann eine entsprechende Loesung finden. "Flexible Arrays" sind IMHO in einer Arduino-Umgebung selten das Mittel der Wahl.

(27.04.2015 18:26)Scherheinz schrieb:  Mit sizeof() kannst du die array Größe rausfinden.
sizeof ist eigentlich keine Funktion. D.h. es wird im Prinzip direkt vom Compiler ausgewertet. Wirklich flexibel ist das nicht, da an den Stellen, an denen sizeof in dieser Art funktioniert, Du sowieso schon weisst, wie gross das Array ist. Da ist es einfacher (bzw. meiner Meinung nach sicherer), die Array-Groesse mit einem #define festzulegen und dann das #define ueberall zu benutzen, wo man die Groesse braucht.

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.04.2015, 12:46 (Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 12:57 von scritch.)
Beitrag #6
RE: Arraygröße herausfinden
Okay, dann versuche ich mal zu erklären, was ich vor habe. Vielleicht gibt es für mein Problem ja auch eine ganz einfache Lösung, von der ich bisher noch gar nicht wusste. Und zwar:

Ich habe mir eine kleine Tafel mit LED's gebaut (Thorsten kennt sie schon) wo per Laufschrift Text dargestellt werden kann. Der Text der dargestellt werden soll, ist in einem Array gespeichert, welches folgendermaßen aussieht:

char text[13] = {'F', 'R', 'O', 'H', 'E', ' ', 'O', 'S', 'T', 'E', 'R', 'N', ' '};

Nun möchte ich aber, ohne immer im Code herumfuhrwerken zu müssen, gerne zwischen unterschiedlichen Texten hin und her schalten. Das soll dann später evt. über Taster o. Ä. funktionieren. Mal schauen. Meine erste Idee war es halt, ein Array zum Anfang des Codes zu deklarieren, um später im Code dann mit einem switch-case das Array individuell zu befüllen. Das hätte dann z. B. so ausgesehen:

Code:
char atext[1] = {' '};

//hauptschleife
switch(modus_text){
  
  case 1:
      atext[3] = {'A', 'B', 'C'};
    break;
    
    case 2:
      atext[5] = {'D', 'E', 'F', 'G', 'H'};
    break;
    
    case 3:
      atext[7] = {'I', 'J', 'K', 'L', 'M', 'N', 'O'};
    break;

//hauptschleife ende
  }

Den "modus_text" würde ich dann von "außen" mit den Tastern verändern können um so zwischen den 3 vorprogrammierten Texten hin und her zu wechseln. Aber so funktioniert es ja nicht. da ich die Größe des Arrays nachträglich leider nicht mehr ändern kann.

Edit: Was ich aber evt. machen kann ist, dass ich wie in meinem oben genannten Beispiel die Daten aus dem jeweils einen Array immer in das "variable" Array kopiere. Hat den Nachteil, dass, wenn die Anzahl der zu kopierenden Arrayelemente kleiner ist als der vorhandenen Arrayelemente des variablen Arrays.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.04.2015, 14:24
Beitrag #7
RE: Arraygröße herausfinden
Hi,
das sind char-Arrays, da ist es etwas einfacher. Normalerweise macht man da ein CHR(0) ans Ende. Also Du definierst einfach ein Array, das ein Element groesser ist als der groesste Text, den Du darstellen willst. Dann sorgst Du noch dafuer, dass am Ende immer ein CHR(0) steht, das geht z.B. mit strcpy. Also etwa:
Code:
char atext[8];

//hauptschleife
switch(modus_text){
  
  case 1:
      strcpy(atext, "ABC");
    break;
    
    case 2:
      strcpy(atext, "DEFGH");
    break;
    
    case 3:
      strcpy(atext, "IJKLMNO");
    break;

//hauptschleife ende
  }
Verarbeitung per for-Schleife geht dann so:
Code:
for(int i = 0; atext[i] && i < 8; i++) {
  //mach was mit atext[i]
}

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.04.2015, 15:07 (Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 15:16 von scritch.)
Beitrag #8
RE: Arraygröße herausfinden
Hallo Thorsten. Danke für deine Antwort. Wenn ich es richtig verstanden habe und strcpy() wirklich die Buchstaben aus dem String jeweils in ein Arrayfeld kopiert, ist es haargenau das, was ich brauchte. Danke dir Smile Das mit dem CHR(0) habe ich jedoch nich verstanden.

Edit: Was passiert denn in folgender Situation: Ich speichere in das Array 10 Buchstaben mittels strcpy(). Im nächsten Durchlauf sindes aber nur 5 Buchstaben. Bleiben die anderen Buchstaben aus dem vorherigen Lauf bestehen, wenn ich mich nicht darum kümmere?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste