Flexible Felder in C



  • Hallo,

    Hab da eine Frage zu Dyn. Datenstrukt. in C:
    gibt es da so etwas wie flexible (dynamische) Felder?!
    Wenn ja wie deklariere ich die am besten. wenn nein wisst ihr
    vielleicht eine äquivalente Struktur hab über eine Liste von dynamischen
    Arrays nachgedacht. ist aber doch ziemlich unschön.

    vielen Dank

    der_Konrad

    zweite ordnung muß sein



  • Hallo,

    das hier war nicht hilfreich 🙂



  • Hallo hab die dynamischen Listen jetzt doch gefunden.
    für alle die die es auch interessiert hier mein testcode

    so long

    der_Konrad

    zweite ordnung muß sein

    typedef struct {
    		int spalten;
    		int zeilen;
    		int **matrix;
    } a_matrix;
    
    void main(int argc, char *argv[]){
    int i;
    int j;
    a_matrix A;
    A.spalten = 4;
    A.zeilen = 4;
    
    A.matrix = (int**) malloc(A.spalten*sizeof(int));      // Allocate row pointers
    
     for (i = 0; i < A.spalten; i++){
        A.matrix[i] = (int*) malloc(A.zeilen*sizeof(int));;    // Allocate rows
     }
    
    for (i = 0; i < A.spalten; i++){
       for (j = 0; j < A.zeilen; j++){
          A.matrix[i][j] = i *j;
       }
    }
    
    // just a little test
    for (i = 0; i < A.spalten; i++){
       for (j = 0; j < A.zeilen; j++){
          printf("%d ", A.matrix[i][j]);
       }
     printf(" \n");
    }
    
     for (i = A.spalten-1; i >= 0; i--){
       free(A.matrix[i]);            //  Deallocate rows
     }
     free(A.matrix);                  //  Deallocate row pointers
    }
    


  • ich finds auch immer ganz praktisch eine matrix wie folgt zu erstellen, mal ein schnell eingehackter source, praktisch finde ich es deshalb wegen den aufrufen von free 😉 aber das nur nebenbei

    int main(void)
    {
    	int z,s,i,j,data_size;
    	z=s=3;
    
    	data_size = z*s;
    
    	double **p_2d = malloc(sizeof(*p_2d)*z);
    	double *data_2d = malloc(sizeof(*data_2d)*data_size);
    
    	for(i=0,j=0; j < (data_size) ; j+=z,i++)
    		 p_2d[i] = &data_2d[j];
    
    free(data_2d);
    free(p_2d);
    
    return 0;
    }
    

Anmelden zum Antworten