bonjour,
je veux créer une matrice. La première colonne de la matrice sont des valeurs et les autres colonnes sont de type structure.
est-ce que je peux avoir ça en C??
Merci
Version imprimable
bonjour,
je veux créer une matrice. La première colonne de la matrice sont des valeurs et les autres colonnes sont de type structure.
est-ce que je peux avoir ça en C??
Merci
Tu peux créer une structure contenant un tableau de valeurs de taille N et un tableau de structures à deux dimensions de taille N*M.
Et puisque la structure est spécifique à ton usage, tu peux aussi créer toutes les fonctions nécessaires pour manipuler cette structure. Comme ça, du point de vue de l'utilisateur, tout est encapsulé.
oui mais pour ça chaque case de la matrice est de type structure {tableau de valeurs, tableau de structures à deux dimensions de taille N*M}.
Une bidouille :
...puis :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #define MATRIX_WIDTH 16 #define MATRIX_HEIGHT 12 struct foo { // ... }; struct bar { int key; struct foo values[MATRIX_WIDTH - 1]; }; typedef struct bar matrix[MATRIX_HEIGHT]; typedef unsigned int uint_t; void matrix_set(matrix m, uint_t x, uint_t y, const int *key, const struct foo *value) { struct bar *entry = &m[y]; if (x == 0) entry->key = *key; else entry->values[x - 1] = *value; } void matrix_get(const matrix m, uint_t x, uint_t y, int *key, struct foo *value) { const struct bar *entry = &m[y]; if (x == 0) *key = entry->key; else *value = entry->values[x - 1]; }
Code:
1
2
3
4
5
6
7
8
9
10
11 #include <stdlib.h> // ... matrix m; int key = 5; matrix_set(m, 0, 3, &key, NULL); struct foo value; matrix_get(m, 2, 7, NULL, &value);
Bonjour,
typiquement en C quand on doit avoir un type qui mélange des types différents on utilise union.
Pour connaître le type contenu on crée un enum et on enrobe le tout dans une struct :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 typedef enum {VT_INT, VT_DOUBLE, } variant_type_t; typedef struct { variant_type_t vtype; union { int val_int; double val_double; }; } variant_t; ... variant_t var_int = {.vtype=VT_INT, .val_int=42}; variant_t var_dbl={.vtype=VT_DOUBLE, .val_double=42.0}; variant_t var_array[] = { var_int, var_dbl };