lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Wie kann ich ein Array an eine Funktion übergeben wenn die Dimensionen (x, y, z) immer unterschiedlich sind? Es soll also ein einfaches, ein 2D und ein 3D Array sein können.

void test(*int[dim1][dim2][dim3]) { ... }
von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Du kannst die Dimensionen als zusätzliche Parameter angeben.

void test(int* arr, int dim1, int dim2, int dim3) {
    for (int i = 0; i < dim1; i++) {
        for (int j = 0; j < dim2; j++) {
            for (int k = 0; k < dim3; k++) {
                int value = arr[i * dim2 * dim3 + j * dim3 + k];
                printf("%d ", value);
            }
            printf("\n");
        }
        printf("\n");
    }
}

int main() {
    int array3D[2][3][4] = {
        {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
        {{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
    };

    int dim1 = 2, dim2 = 3, dim3 = 4;
    test((int*)array3D, dim1, dim2, dim3);

    return 0;
}
von  
0 Pluspunkte 0 Minuspunkte

Du kannst den Speicher dynamisch reservieren und die Dimensionen des Array als Parameter an die Funktion übergeben.

void print_array(int*** arr, int dim1, int dim2, int dim3) {
    for (int i = 0; i < dim1; i++) {
        for (int j = 0; j < dim2; j++) {
            for (int k = 0; k < dim3; k++) {
                int value = arr[i][j][k];
                printf("%d ", value);
            }
            printf("\n");
        }
        printf("\n");
    }
}

int main() {
    int dim1 = 2, dim2 = 3, dim3 = 4;

    int*** array3D = (int***)malloc(dim1 * sizeof(int**));
    for (int i = 0; i < dim1; i++) {
        array3D[i] = (int**)malloc(dim2 * sizeof(int*));
        for (int j = 0; j < dim2; j++) {
            array3D[i][j] = (int*)malloc(dim3 * sizeof(int));
        }
    }

    // Initialisierung des array3D
    for (int i = 0; i < dim1; i++) {
        for (int j = 0; j < dim2; j++) {
            for (int k = 0; k < dim3; k++) {
                array3D[i][j][k] = rand() % 100;  // Zufällige Zahl zwischen 0 und 99
            }
        }
    }

    print_array(array3D, dim1, dim2, dim3);

    // Speicher freigeben
    for (int i = 0; i < dim1; i++) {
        for (int j = 0; j < dim2; j++) {
            free(array3D[i][j]);
        }
        free(array3D[i]);
    }
    free(array3D);

    return 0;
}
von  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2.3k Fragen

2.8k Antworten

261 Kommentare

13 Nutzer