bonjour, j'aurais qq questions sur les pointeurs. Je vous dis ce que je sais (ou crois savoir) et j'aimerais que vous me donniez votre avis.
1) si je fais
alors tab est un tableau à deux composantes et chaque éléments de tab est un T. Donc si T est une structure (par exemple Voiture), j'accède à ses champs par l'intermédiaire du point tab[0].pneu; tab[0].porte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 T tab[2]
2) si je fais
Idem que 1) sauf que chaque éléments de tab est un pointeur sur un T et donc je fais tab[0]->pneu; tab[0]->porte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 T * tab[2]
3) Là est ma question
et là je ne comprends pas : chaque éléments de tab est un T ou un T * ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 T * tab=malloc(2*sizeof(*tab));
tab[0] est un Voiture * ou un Voiture ?
Pour faire simplement, voici mon code (qui marche)
J'ai donc 2 questions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include<stdlib.h> #include<stdio.h> int main() { char * t[2]; t[0]="CH3"; t[1]="CH4"; t[2]="CH2"; int i; for(i=0;i<3;++i) printf("t[%d] = %s\n",i,t[i]); char **tab=malloc(3*sizeof(*tab)); tab[0]=t[0]; tab[1]=t[1]; tab[2]=t[2]; for(i=0;i<3;++i) printf("tab[%d] = %s\n",i,tab[i]); free(tab); return 0; }
1) t est un tableau de dimension 2. Pourquoi t[2] existe ? Ca devrait planter non ? Est-ce à moi de faire les tests de dépassements de tableau ? (Au vu de ce code je pense que oui). Mais est-ce que l'adresse mémoire de tab[2] pourra être effacé n'importe quand ou sera-t-elle effacée lorsque t sera détruit ?
2) Avec mon tab, je voulais faire un tableau dynamique donc chaque composante est un char * (donc une string si j'ai bien compris).
Au début j'avais fait
(cf ma question 3). Au vu de ce code, j'ai l'impression que tab[0] est un char et non un char* d'où mon
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char *tab=malloc(3*sizeof(*tab));
où là tab[0] est un char * . Donc, d'après ce test, si je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char **tab=malloc(3*sizeof(*tab));
tab[0] est une Voiture (et non une Voiture *) et donc je dois faire tab[0].pneu, et si je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Voiture *tab=malloc(3*sizeof(*tab));
tab[0] est une Voiture * et donc je dois faire tab[0]->pneu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Voiture **tab=malloc(3*sizeof(*tab));
Est-ce correct ?
Mais pourquoi si je fais
tab[0] est une Voiture * et si je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Voiture * tab[2]
tab[0] est une Voiture et non une Voiture * ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Voiture * tab=malloc(2*sizeof(*tab)); // <=> malloc(2*sizeof(Voiture)); ??
Merci.
Partager