Forum: Mikrocontroller und Digitale Elektronik 2. element im 2d array auf null setzen


von Felix (Gast)


Lesenswert?

Hallo,

ich habe ein 2d-Array
1
char signs[][2] = {{'A',0},{'B',0}....}

die zweiten werte werden im code hochgezählt.
Wie kann ich diese am einfachsten und schnellsten wieder auf 0 setzen?
Mit einer for-schleife alles durchgehen? Oder ist so etwas auch mit 
memset möglich?

von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


Lesenswert?

Felix schrieb:
> Wie kann ich diese am einfachsten und schnellsten wieder auf 0 setzen?
> Mit einer for-schleife alles durchgehen?

Jep. Der Speicher muss so oder so adressiert werden um die 0 an die 
entsprechende Stelle zu schreiben, da fuehrt kein Weg dran vorbei.

von DPA (Gast)


Lesenswert?

memset, memcpy und co. unterstützen leider kein stride[1]. Bei dieser 
Datenstruktur musst du also auf ne schleife zurück greifen.

Falls du die Werte in unterschiedliche Arrays packen kannst, könnte man 
memset wieder nehmen, also:
1
char sign_letter[] = {'A', 'B', 'C', ...};
2
int sign_count[sizeof(sign_letter)/sizeof(*sign_letter)] = {0};
3
...
4
  memset(sign_count, 0, sizeof(sign_count));

1) https://en.wikipedia.org/wiki/Stride_of_an_array

von zitter_ned_aso (Gast)


Lesenswert?

Felix schrieb:
> ich habe ein 2d-Arraychar signs[][2] = {{'A',0},{'B',0}....}

ändere die Reihenfolge dann kanns du es:
1
    #define LINES 2                                                     
2
    #define COLS 5                                                      
3
                                                                        
4
    unsigned char my_array[LINES][COLS]={                               
5
        {'a', 'b', 'c', 'd', 'e'}, {5,4,3,2,1}};                        
6
                                                                        
7
    for(int i=0; i<COLS; i++)                                           
8
            printf("(%c, %d)\t", my_array[0][i], my_array[1][i]);       
9
                                                                        
10
                                                                        
11
    memset(my_array+1, 0, COLS*sizeof(char));                           
12
    puts("");                                                           
13
                                                                        
14
    for(int i=0; i<COLS; i++)                                           
15
            printf("(%c, %d)\t", my_array[0][i], my_array[1][i]);

(ein Array mit "x-Zeilen und 2 Spalten" durch ein Array mit "2 Zeilen 
und x Spalten" ersetzen)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.