Danke Danke:  0
Gefällt mir Gefällt mir:  0
Dislikes Dislikes:  0
Ergebnis 1 bis 2 von 2

Thema: C: Matrix beliebiger Länge übergeben

    postbit_legacy mit 2x google adsense.txt DETAILS AKTIVITÄTEN Letzten Monat 29. Sep. Sie haben ein Element umbenannt Text postbit_legacy mit 2x google adsense.txt postbit_legacy.txt 29. Sep. Sie haben ein Element hochgeladen Text postbit_legacy.txt Keine aufgezeichnete Aktivität vor dem 29. September 2017 Alle Auswahlen aufgehoben Alle Auswahlen aufgehoben
  1. #1

    Registriert seit
    05.12.15
    Danke (erhalten)
    5
    Gefällt mir (erhalten)
    13

    Standard C: Matrix beliebiger Länge übergeben

    Anzeige
    Hey,

    folgendes Setting:

    Code:
    #include <stdio.h>
    #include <string.h>
    
    typedef unsigned int uint32_t;
    typedef uint32_t row[11];
    const row A = {0}; //egal was hier drin steckt..
    
    // operation on row-type
    void do_was_anderes( row B ){
        // Keine Operation
        // soll nur Variablen erhalten
        // ggf. ist ein Output als Test erforderlich.
    }
    
    // operation on array of row-types
    void do_( uint32_t *B, uint32_t n ){
        int i;
        for(i=0; i<n; i++){
            do_was_anderes( &B[i] ); //B[i] ist vom Typ row
        }
    }
    
    // initializing do_ operation
    int do_main(  uint32_t n ){
        typedef row matrix[n];
        matrix B;
        
        uint32_t size = n*11*sizeof(uint32_t);  
    	memset( B, 0, size);
        
        do_( B ,n);
    
        return 1;
    }
    
    int main(){
        return do_main(2);
    }
    Error bekomme ich z.B. an der Stelle, wo B[i] reingeworfen wird, wegen Typenfehler. Es geht viel mehr darum, die Argumente sauber zu übergeben. In B speichere ich eine Matrix aus n Zeilen, die dem Datentypen von A entsprechen. Dieser ist selbst ein Array. Insgesamt sollen diese Teile dann an eine letzte Funktion übergeben werden, die für diese Arrays geschaffen ist. Die Länge von B (da variabel) übergebe ich in "n".

    Insgesamt ein einfaches Programm, dass erstmal nichts macht, sondern nur das Taling nachvollziehen lässt.

    Fehler z.B.

    Code:
    typedef row matrix[n];
    >>> error: variable-sized object may not be initialized
    
    row C0 = {0};
    >>> warning: excess elements in array initializer
    >>> note: (near initialization for 'C0')
    >>> error: variable-sized object may not be initialized
    die letzte Warnung lässt sich verstehen, da kein Speicher reserviert werden kann, kann die Variable auch nicht initialisiert werden.. muss man also über memset selber machen.
    Geändert von Shalec (12.10.17 um 12:03 Uhr) Grund: Ersten Code korrigiert, sodass Fehler Trace gesehen werden kann.

  2. postbit_legacy mit 2x google adsense.txt DETAILS AKTIVITÄTEN Letzten Monat 29. Sep. Sie haben ein Element umbenannt Text postbit_legacy mit 2x google adsense.txt postbit_legacy.txt 29. Sep. Sie haben ein Element hochgeladen Text postbit_legacy.txt Keine aufgezeichnete Aktivität vor dem 29. September 2017 Alle Auswahlen aufgehoben Alle Auswahlen aufgehoben
  3. #2

    Registriert seit
    05.12.15
    Danke (erhalten)
    5
    Gefällt mir (erhalten)
    13

    Standard

    Anzeige
    Arrays and Pointers 2.10
    und Rheinwerk Computing :: C von A bis Z &ndash; 11.9 Mehrdimensionale Arrays
    sind nice to know. Ich dachte bis heute, dass Mehrdimensionale Arrays einfach Pointer auf Pointer sind..

    Lösung:
    Code:
    #include <stdio.h>
    #include <string.h>
    
    typedef unsigned int uint32_t;
    typedef uint32_t row[11];
    const row A = {0}; //egal was hier drin steckt..
    
    // operation on row-type
    void do_was_anderes( row A ){
        // Keine Operation
        // soll nur Variablen erhalten
        // ggf. ist ein Output als Test erforderlich.
        for(int i=0; i<11; i++){
            printf("%08X\n", A[i]);
        }
    }
    
    // operation on array of row-types
    void do_( uint32_t B[][11], uint32_t n ){
        int i;
        for(i=0; i<n; i++){
            do_was_anderes( B[i] ); //B[i] ist vom Typ row
        }
    }
    
    // initializing do_ operation
    int do_main(  uint32_t n ){
        typedef row matrix[n];
        matrix B;
        
        uint32_t size = n*11*sizeof(uint32_t);  
    	memset( B, 0, size);
        
        do_( B ,n);
    
        return 1;
    }
    
    int main(){
        return do_main(2);
    }
    Geändert von Shalec (12.10.17 um 16:57 Uhr)

Ähnliche Themen

  1. Verstecken der Länge eines Plaintexts
    Von gerontimo im Forum Cryptography & Encryption
    Antworten: 10
    Letzter Beitrag: 25.05.16, 16:14
  2. Länge einer Zahl berechnen. C#
    Von Betty im Forum Code Kitchen
    Antworten: 8
    Letzter Beitrag: 04.04.16, 14:56
  3. [MASM32] Vektor der Länge n
    Von CrAc im Forum Code Kitchen
    Antworten: 0
    Letzter Beitrag: 04.02.12, 14:56
  4. M$ Word Tab-Länge variiert
    Von Sebifi im Forum Applikationen
    Antworten: 6
    Letzter Beitrag: 21.07.06, 15:57
  5. Länge des Pws bei Zip Files ???
    Von Jimmy im Forum (In)security allgemein
    Antworten: 20
    Letzter Beitrag: 05.08.04, 22:56

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •