2017-09-24 5 views
-2

Je me demandais comment j'accéder à un double pointeur à l'intérieur d'un struct, par exemple:Comment allouer de la mémoire et déréférencer un tableau de tableaux dans une structure?

typedef struct Example { 
    char **set; 
    int size; 
}Example; 

La struct est appelée dans la fonction:

struct Example exmpl; 

Si je devais créer un nouveau tableau dans ce tableau de tableaux, comment l'appelerais-je dans une fonction/main? Ou est-ce la même chose que la normale, exmpl->set?

+0

Oui, je dois l'allouer aussi! –

+0

Il n'y a pas de "tableau de tableaux" dans votre structure! Un pointeur n'est pas un tableau (ou vice versa). – Olaf

+0

Essayez d'écrire du code qui fait cela pour un membre 'char * set; 'd'abord, puis posez des questions sur' char ** set; ' – chux

Répondre

0

Peu importe le type de set, vous y accédez avec exmpl.set. Si vous avez besoin d'accéder à un seul élément, ce sera exmpl.set[0][0] par exemple.

Si vous devez allouer de la mémoire pour cela, vous devez allouer de la mémoire pour le réseau externe, puis pour chaque matrice intérieure indépendamment, comme celui-ci pour créer un tableau de 10x20:

struct Example exmpl; 
exmpl.set = malloc(10 * sizeof(char*));  // 10 "arrays" in the set 
for (int i = 0; i < 10; i++) 
    exmpl.set[i] = malloc(20 * sizeof(char)); // 20 chars within each "array" 

Ensuite, pour chaque réglage la valeur de l'élément:

for (int i = 0; i < 10; i++) 
    for (int j = 0; j < 20; j++) 
     exmpl.set[i][j] = calculate(i, j); 

et, un tableau et un pointeur sont différents, donc ce que vous avez ici est un pointeur vers un pointeur vers un char (qui fonctionne de façon similaire à un tableau à 2 dimensions de caractères)

+1

[Concernant la distribution du résultat de' malloc() '] (https://stackoverflow.com/ q/605845/2410359) – chux

+0

N'oubliez pas de définir 'exmpl.size = 10;' –

+0

Merci de m'indiquer dans la bonne direction! Aurais-je encore besoin d'utiliser la boucle for même si c'est un tableau de chaînes? –