Array mit Benutzerdefinierter Größe

#2255941
Lesenswert?

detailierung:

Variante 1:
mit malloc ein Pointer-Array mit der Größe der ersten Dimension erzeugen 
und dann in einer Schleife die Pointer mit malloc auf die größe der 2. 
Dimension Allozieren

Variante 2:
mit malloc ein eindimensionales Array der Größe MxN erzeugen und die 
Transformation der Indizes selbst übernehmen.
i_ij = i*n + j

Variante 3:
mit malloc ein Pointer-Array mit der Größe der ersten Dimension erzeugen 
und mit malloc ein eindimensionales Array der Größe MxN erzeugen.
anschließen das Pointerarray mit geeigneten Zeigern in das 
eindimensionale Array befüllen, indem die selbe Berechnungsvorschrift, 
wie auch in Variante 2 zum einsatz kommt
#2256040
Lesenswert?

Variante 4 (nur mit gcc oder C99):
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html
1
#include <stdio.h>
2
#include <inttypes.h>
3

4
void get_dimensions(uint8_t* w, uint8_t* h)
5
{
6
    /* w und h koennte man hier auch einlesen */
7
    *w = 10;
8
    *h = 5;
9
}
10

11
int main(void)
12
{
13
    uint8_t width;
14
    uint8_t height;
15
    get_dimensions(&width, &height);
16

17
    uint8_t arr[width][height];
18

19
    for (uint8_t x = 0; x < width; ++x)
20
        for (uint8_t y = 0; y < height; ++y)
21
            arr[x][y] = y * 10 + x;
22

23
    for (uint8_t y = 0; y < height; ++y)
24
    {
25
        for (uint8_t x = 0; x < width; ++x)
26
            printf("%2u ", arr[x][y]);
27
        printf("\n");
28
    }
29

30
    printf("size   = %d\n", sizeof(arr));
31
    printf("height = %d\n", sizeof(arr[0]));
32
    printf("width  = %d\n", sizeof(arr) / sizeof(arr[0]));
33

34

35

36
    return 0;
37
}


edit: mit
1
gcc -std=c99 foo.c
 compilieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren