tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von sheel
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
461
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Genius Genius ist offline Mitglied
    Registriert seit
    Jan 2012
    Beiträge
    20
    Hallo
    ich sitze gerade vor einem eigentlich recht simplen Problem - hoffe ich zumindest !

    Ich möchte in einer for Schleife mehrere Integer-Arrays allokieren.
    Ich weiß, dass der Code so wie er nun folgt absoluter Müll ist, aber damit ihr nachvollziehen könnt was ich meine:
    Code :
    1
    2
    3
    4
    
    int i;
    for(i = 1; i <= 10; i++) {
        int i[10];
    }

    Was ich am Ende möchte sind (bezogen auf diesen Code) 10 Arrays mit 10 Einträgen die "1", "2", "3", "4" ... usw. heißen.

    Es handelt sich um eine Vielzahl und eine Variable Anzahl von Arrays - deswegen möchte ich sie in der for Schleife generieren.

    Schon mal Danke im Voraus!
    Mit freundlichen Grüßen
    Genius
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    was hat das mit Sockets zu tun?
    Hab einen neuen Thread daraus gemacht.

    Zum Problem: Also ein Array aus Arrays

    Was davon trifft zu:
    a) Jedes der Arrays hat gleich viel Elemente und die Anzahl ist immer gleich.
    zB. ein int[10], noch ein int[10] usw...

    b) Wie a, die 10 kann aber beim nächsten Programmdurchlauf anderes sein.
    16-16-16...

    c) Jedes der Arrays hat unterschiedlich viel Elemente.
    12-47-9...
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    hmm, bin mir auch nicht sicher, ob ich die Frage wirklich verstanden habe ....

    Du möchtest zehn verschiedene integer-Arrays mit jeweils Länge 10 haben?
    Also sowas wie :
    int 1[10];
    int 2[10];
    int 3[10];
    .....

    Möchtest Du durch die Schleife erreichen, dass die Variablenbezeichner der Arrays dynamisch sind?

    Das würde so mit Deinem Code natürlich nicht gehen, da Du ja versucht 10x ein Array mit VARIABLEM Namen zu erzeugen!
    Zitat Zitat von Genius Beitrag anzeigen
    Hallo
    Code :
    1
    2
    3
    4
    
    int i;
    for(i = 1; i <= 10; i++) {
        int i[10];
    }
    Da geht so nicht, da die Bezeichner zur Compilezeit bekannt sein müssen !

    Du könnest höchstens - wie von Sheel vorgeschlagen - ein Array der Länge 10 bestehend aus weiteren Integer-Arrays deklarieren !

    Gruß
    Klaus
    Geändert von vfl_freak (12.02.12 um 11:35 Uhr) Grund: leichte Überarbeitung :-)
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  4. #4
    Genius Genius ist offline Mitglied
    Registriert seit
    Jan 2012
    Beiträge
    20
    Ich muss am Anfang meines Programms eine Vielzahl von gleichgroßen int-Arrays erstellen.

    Du möchtest zehn verschiedene integer-Arrays mit jeweils Länge 10 haben?
    Also sowas wie :
    int 1[10];
    int 2[10];
    int 3[10];
    Genau =)!

    Da ich etwas über 100 Arrays brauche und ich zu "faul" bin diese am Anfang von Hand zu definieren wollte ich das eine for-Schleife erledigen lassen.
    Außerdem möchte ich schnell und unkompliziert die Anzahl der Arrays verändern können.

    Ein zweidimensionaler Array kommt (zumindest wie ich das verstanden habe) leider nicht in Frage, da es entscheidend ist, dass ich viele einzelne Speicherbereiche habe.
    Es sollen nämlich eine Vielzahl von Prozessen darauf zugreifen - das geht nur über ein mutex lock - wäre es ein einzelner zweidimensionaler Array blockieren sich die Prozesse aufs ärgste - deswegen brauche ich viele einzelne separate Arrays.

    Höchstens es reicht wenn ich über die mutex einzelne Spalten des mehrdimensionalen Arrays "blockiere" - und es dann ungefährlich ist wenn mehrere Prozesse darauf zugreifen - so lange immer nur einer auf eine Spalte zugreift?!

    Allgemein gilt:
    - es sollen x Arrays erzeugt werden
    - jeder der x Arrays hat die selbe Anzahl an Elementen
    - die Benennung der Arrays sollte linear sein also z.B. name_1[10]; name_2[10]; name_3[10]; ... usw., damit ich später unkompliziert darauf zugreifen kann.

    Ich weiß warum ich früher nur php programmiert habe - da wäre das ganz simpel :-p!

    Vielen Dank
    Mit freundlichen Grüßen
    Genius
     

  5. #5
    Avatar von saftmeister
    saftmeister saftmeister ist offline Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.516
    Warum verwendest du nicht malloc()?
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  6. #6
    Genius Genius ist offline Mitglied
    Registriert seit
    Jan 2012
    Beiträge
    20
    Zitat Zitat von saftmeister Beitrag anzeigen
    Warum verwendest du nicht malloc()?
    Das Problem bleibt dann doch das selbe!? - dann muss ich eben 100 pointer von Hand schreiben ... wann ich den Speicher allokiere ändert ja nichts an der "wie spare ich mir das von Hand 100 Zeilen schreiben" Problematik ...
     

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Hi

    das mit den Namen geht nicht so wirklich,
    da Variablennamen im kompilierten Programm nicht existieren.

    Wenn du die Arrayanzahl verändern möchtest: Liste etc... aus Arrays.
    Jeder Zugreifer hat seinen eigenen Iterator
    und jede Spalte hat einen Mutex (struct aus Array und Mutex)

    Kannst du mir auch die erste Frage von oben noch beantworten?

    Und mit PHP wäre das meiner Meinung nach nicht simpel, sondern komplett unmöglich.

    @Saftmeister: Darum gehts doch die ganze Zeit.
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  8. #8
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.956
    @sheel: Falsch! Mit PHP ist es eines der leichtesten Dinge Variablen mit variablen Namen zu erstellen:
    Code PHP:
    1
    2
    3
    4
    
    for($i = 0; $i < 10; ++$i) {
      $var_name = 'name_' . $i;
      ${$var_name} = 0;
    }
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Aber die Cross-Prozess-Sachen, die (Winapi-lastigen) Mutexe erstellen etc....?
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  10. #10
    Avatar von einfach nur crack
    einfach nur crack einfach nur crack ist offline mag Cookies & Kekse
    tutorials.de Premium-User
    Registriert seit
    May 2007
    Ort
    Dresden (Sachsen)
    Beiträge
    1.956
    @sheel: Du kannst in PHP (mit entsprechender Erweiterung) neue Kindprozesse erstellen, die du dann von einem Hauptprozess aus regelmäßig kontrollierst. Aber ansonsten ist es wirklich unmöglich.
     
    Ich mag:
    • positive Bewertungen meiner Beiträge
    • ein Danke für meine hilfreichen Beiträge

    Dabei kann ich dir helfen: PHP --- Javascript --- Ruby --- Coffeescript --- CSS --- HTML --- Webtechnologien --- Shell --- UNIX

    ... noch was: falls du mit dem Thema hier fertig bist, dann kannst du es auch als erledigt markieren.

  11. #11
    Genius Genius ist offline Mitglied
    Registriert seit
    Jan 2012
    Beiträge
    20
    Kannst du mir auch die erste Frage von oben noch beantworten?
    was hat das mit Sockets zu tun?
    Ich wollte keine Threads "spamen".

    Was davon trifft zu:
    a) Jedes der Arrays hat gleich viel Elemente und die Anzahl ist immer gleich.
    zB. ein int[10], noch ein int[10] usw...

    b) Wie a, die 10 kann aber beim nächsten Programmdurchlauf anderes sein.
    16-16-16...

    c) Jedes der Arrays hat unterschiedlich viel Elemente.
    12-47-9...
    Allgemein gilt:
    - es sollen x Arrays erzeugt werden
    - jeder der x Arrays hat die selbe Anzahl an Elementen
    - die Benennung der Arrays sollte linear sein also z.B. name_1[10]; name_2[10]; name_3[10]; ... usw., damit ich später unkompliziert darauf zugreifen kann.
    Ich möchte die Anzahl der Arrays nicht während des Programm läuft verändern.
    Nur wenn ich das Programm eben neu compile würde ich gerne einfach zwei #defines verändern - eines für die Anzahl der Arrays und eines für die Elemnte - und meine for-Schleife allokiert mir dann die Arrays.


    Ich weiß warum ich früher nur php programmiert habe - da wäre das ganz simpel :-p!
    War genau auf so etwas bezogen:
    PHP-Code:
    for($i 0$i 10; ++$i) {
      
    $var_name 'name_' $i;
      ${
    $var_name} = 0;

    Genau das möchte ich haben ... nur eben in c ... geht ja aber scheinbar nicht:
    das mit den Namen geht nicht so wirklich,
    da Variablennamen im kompilierten Programm nicht existieren.
    Wenn du die Arrayanzahl verändern möchtest: Liste etc... aus Arrays.
    Jeder Zugreifer hat seinen eigenen Iterator
    und jede Spalte hat einen Mutex (struct aus Array und Mutex)
    - sheel deine Alternative habe ich so leider nicht ganz verstanden.

    Mit freundlichen Grüßen
    Genius
    Geändert von Genius (12.02.12 um 14:15 Uhr) Grund: verständlichkeit
     

  12. #12
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Ah, hab da was falsch verstanden.
    Wenn die Arrayanzahl/Arraygröße nur über #defines geändert werden soll,
    ist die Liste überflüssig.

    Du machst zuerst so ein struct:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    
    #define ARRAY_GROESSE 10
     
    struct mutex_und_array //Name natürlich änderbar
    {
        int array[ARRAY_GROESSE];
        Mutex m; //oder wie der eben ausschaut
    };

    Jetzt von dem ein Array
    Code cpp:
    1
    2
    3
    
    #define ARRAY_ANZAHL 16
     
    struct mutex_und_array komplett[ARRAY_ANZAHL];
    Dann hätte man 16 Arrays mit je 10 ints, und zu jedem Array einen eigenen Mutex.
    Zugriff ca. so:
    Code cpp:
    1
    
    komplett[2].array[4] = 5678;
    und komplett[2].m wäre der Mutex für dieses Array.

    Alle Variablen/define-Namen natürlich anpassbar.
    Genius bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  13. #13
    Genius Genius ist offline Mitglied
    Registriert seit
    Jan 2012
    Beiträge
    20
    Irre! Genau das und genau so habe ich es gebraucht!

    Mutex m; //oder wie der eben ausschaut
    Sollte es dich interessieren:
    Code :
    1
    
    pthread_mutex_t name;

    Vielen Dank an alle!
    Mit freundlichen Grüßen
    Genius
     

Ähnliche Themen

  1. c# zweidimensionales array
    Von xlon im Forum .NET Windows Forms
    Antworten: 12
    Letzter Beitrag: 26.02.10, 08:21
  2. [perl] Vorhandes Array [Name;Vorname/n] in zweidimensionales Array splitten
    Von FlockY im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 3
    Letzter Beitrag: 31.08.09, 18:53
  3. Zweidimensionales Array von VB
    Von si031006 im Forum PHP
    Antworten: 10
    Letzter Beitrag: 22.12.06, 11:19
  4. Zweidimensionales Array
    Von crazyPower im Forum PHP
    Antworten: 2
    Letzter Beitrag: 04.07.05, 16:03
  5. [c++] zweidimensionales dynamisches array
    Von andreas_gierisch im Forum C/C++
    Antworten: 34
    Letzter Beitrag: 22.10.04, 14:22