| tableaux dynamiques | |
|
|
Auteur | Message |
---|
Admin Administrateur
Nombre de messages : 232 Age : 36 Localisation : A COTé 2MON PC Loisirs : KUNG FU Date d'inscription : 05/03/2007
| Sujet: tableaux dynamiques Mar 1 Jan - 1:35 | |
| Un des intérêts des pointeurs et de l'allocation dynamique est de permettre de décider de la taille d'une variable au moment de l'exécution, comme par exemple pour les tableaux. Ainsi pour allouer un tableau de n entiers (n étant connu à l'exécution), on déclare une variable de type pointeur sur entier à laquelle on alloue une zone mémoire correspondant à n entiers : - Code:
-
int * alloue_tableau(int n, size_t taille) { return malloc(n * taille); } /* Ailleurs dans le programme */ int * tableau = alloue_tableau(256, sizeof *tableau); if (tableau != NULL) { /* opérations sur le tableau */ /* ... */ free( tableau ); }
Cet exemple alloue un tableau de 256 cases. Bien que la variable soit un pointeur, il est dans ce cas permis d'accéder aux cases de 0 à 255, soit entre les adresses &tableau[0] et &tableau[255], incluses. | |
|
| |
nawal soldat
Nombre de messages : 55 Age : 36 Localisation : chlef Loisirs : lecture Date d'inscription : 28/03/2007
| Sujet: Re: tableaux dynamiques Mar 1 Jan - 22:16 | |
| Lors de la declaration d'un tableau de n entiers sans indiquer le nombres d'elements de ce tableau dns un programme,,j'ai eu droit a un message d'erreure,mais si je precise la valeur de n tous va bien,,donc d'aprés ce que j'ai compris pour resoudre le problemme j'utilise les pointeurs c'est ca?? | |
|
| |
Benayada Houari Administrateur
Nombre de messages : 89 Age : 37 Localisation : Chlef Loisirs : Sport Date d'inscription : 14/03/2007
| Sujet: Re: tableaux dynamiques Mar 1 Jan - 23:11 | |
| C'est exactement l'intéret de l'allocation dynamique... On ne peut jamais mettre une variable comme une taille d'un tableau... cad on ne peut pas mettre : - Code:
-
int t[n]; PS: Ce code marche peut-être sur certains compilateurs mais il est recommandé de ne pas l'utiliser ...Il est préférable d'utiliser l'allocation dynamique Implémentation: On va créer un tableau dynamiquement (ou manuellement) d'entier: Tout d'abord il faut créer un pointeur de type entier, ce pointeur est comme un point de départ dans la mémoire (faut l'imaginer comme ça): - Code:
-
int *tableau; ensuite, par exemple l'utilisateur de notre programme a besoin de 5 cases, alors on va allouer 5 cases de la mémoire pour notre tableau. Supposons que la nombre de cases demandées est: - Code:
-
nbreCases; et dans notre exemple, le nbreCases vaut 5...Alors pour allouer 5 cases dans la mémoire faut utiliser la fonction qui réserve l'espace dans la mémoire malloc( ): en donnant à elle (dans ses parenthèses) la taille de la variable pour qu'elle puisse connaitre l'espace qu'elle va réserver (est ça se fait par le mot clé sizeof())... - Code:
-
tableau=malloc(sizeof(int)); mais comme ça, notre tableau ne contient que 1 élément de type int, puisque la fonction malloc n'a fait réservée que 1 case de type int... Alors, maitenant c'est facile, ça reste juste de multiplier la fonction malloc par notre variable nbreCases - Code:
-
tableau=malloc(sizeof(int)*nbreCases); Reste maitenant que on peut l'utiliser juste comme un tableau normale: par exemple, sa lecture: - Code:
-
int i=0; for (i=0;i<5;i++) { printf("Donner la valeur de premiere case "); scanf("%d",&tableau[i]); }
Dernière édition par le Ven 11 Jan - 0:00, édité 1 fois | |
|
| |
nawal soldat
Nombre de messages : 55 Age : 36 Localisation : chlef Loisirs : lecture Date d'inscription : 28/03/2007
| Sujet: Re: tableaux dynamiques Mer 2 Jan - 15:10 | |
| Merci pour l'explication maintenant c'est trés claire,,mais une chose!! est ce que les termes réservation et allocation ont le même sens ??() dans la programmation bien sur. | |
|
| |
Benayada Houari Administrateur
Nombre de messages : 89 Age : 37 Localisation : Chlef Loisirs : Sport Date d'inscription : 14/03/2007
| Sujet: Re: tableaux dynamiques Mer 2 Jan - 18:45 | |
| Oui Biensur Réservation et Allocation signifie le meme sens... | |
|
| |
nawal soldat
Nombre de messages : 55 Age : 36 Localisation : chlef Loisirs : lecture Date d'inscription : 28/03/2007
| Sujet: Re: tableaux dynamiques Jeu 10 Jan - 22:57 | |
| Toujours dans l'allocation dynamique: - Code:
-
char**tab; tab=malloc(sizeof(*tab)*taille* taille2); Quelqu'un peut m'expliquer ce code!! | |
|
| |
nadia soldat
Nombre de messages : 14 Age : 38 Localisation : chlef Loisirs : informatique Date d'inscription : 28/03/2007
| Sujet: Re: tableaux dynamiques Jeu 10 Jan - 23:44 | |
| HOUARI dans l'exemple précedent normalement tableau=malloc(sizeof(int)*nbrcases); et non pas
tableau=malloc(sizeof(int))*nbrcases; non ? |
| |
| |
|
| |
Benayada Houari Administrateur
Nombre de messages : 89 Age : 37 Localisation : Chlef Loisirs : Sport Date d'inscription : 14/03/2007
| Sujet: Re: tableaux dynamiques Jeu 10 Jan - 23:58 | |
| Oh...excactement je le vois....Merci Nadia .... désolé pour l'erreur... Maintenant ça y est, j'ai corrigée l'erreur...
Et une autre fois désolé pour l'erreur et Merci NADIA pour ta remarque... | |
|
| |
Benayada Houari Administrateur
Nombre de messages : 89 Age : 37 Localisation : Chlef Loisirs : Sport Date d'inscription : 14/03/2007
| Sujet: Re: tableaux dynamiques Ven 11 Jan - 0:47 | |
| hmmm... Nawal t'es sur ce que t'as écrite la dessous... Puisque je pense que c'est faux ce code la... En fait, je pense que tu veux construire une matrice manuellement (ou dynamiquement)...mais normalement ça se fait comme ça: - Code:
-
char **tab;
on a crée un pointeur qui pointe sur une autre pointeur ( désolé mais c'est obligatoire).... ce pointeur la on va le pointer sur un tableau de pointeur, cad on va le marquer comme un point de départ d'un tableau, mais pas n'importe quel tableau, un tableau dont les élément des pointeurs simples de type char, cad (char*), et dans notre cas notre variable est (*tab) Alors - Code:
-
tab=malloc(sizeof(*tab)*taille1);
MAIS PRKOI (*tab) ??? Ok, j'ai dit que ces élément sont des pointeurs simples, cad des pointeurs pointent vers des variables réeles et pas vers des pointeurs ... alors si on a fait (**tab), comme ça on a réserver comme des élément de notre tableau des pointeurs mais des pointeurs sur d'autres pointeurs, et nous nous voulons pas ça... et si on a fait (tab), comme ça on a crée juste un tableau dont les élément ni des pointeurs sur des pointeurs, ni des pointeurs simples mais des élément des variables réels, Alors on a choisit (*tab), puisque c'est un pointeur vers une autre variable réel, et c'est quoi ce variable....C'est un autre tableau...beh oui...chaque élément d'un tableau(donc chaque pointeur) est un point de départ d'un nouveau tableau de char, j'espère bien que vous l'avez imaginez dans votre tete... Alors pour chaque élément(chaque pointeur de notre tableau) on le réserve un tableau (cad on le marque comme un point de départ d'un tableau)...et ça c'est simple...puisque c'est ne que création d'un tableau dynamique dans une boucle...et maintenant quand on réserve dans le sizeof of fait (tab) puisque nous voulons des tableaux dont les éléments des variables réeles. - Code:
-
for (i=0;i<taille1;i++) tab[i]=malloc(sizeof(tab)*taille2);
| |
|
| |
nawal soldat
Nombre de messages : 55 Age : 36 Localisation : chlef Loisirs : lecture Date d'inscription : 28/03/2007
| Sujet: Re: tableaux dynamiques Ven 11 Jan - 19:43 | |
| Bonsoir,, Pardon j'ai oublier de donner plus de précision sur ce que j'ai écrit,, éfféctivement,,je veux allouer dynamiquement une matrice,, - Code:
-
char**tab; tab=malloc(sizeof(*tab)*taille* taille2); Question:est ce qu'il faut donner la valeur de (taille et taille2) au debut ??? et merci pour les éxplications | |
|
| |
Benayada Houari Administrateur
Nombre de messages : 89 Age : 37 Localisation : Chlef Loisirs : Sport Date d'inscription : 14/03/2007
| Sujet: Re: tableaux dynamiques Ven 11 Jan - 20:33 | |
| Nawal, si nous devons donner la valeurs de taille1(les lignes) et taille2(les colonnes), la méthode de l'allocation dynamique est inutile, et il est rien d'autre que l'allocation automatique(statique)... Et comme j'ai dit cca l'interet de l'allocation dymanique, l'allocation de la mémoire se fait en cours de l'éxcution de notre programme ( aprés la compilation), et non comme dans l'allocation automatique, dont l'allocation de la mémoire se fait en cours de la compilation...PS: Et Nawal, pour votre écriture - Code:
-
char **tab; tab=malloc(sizeof(*tab)*taille1*taille2);
comme ça t'as crée une tableau d'une seule dimension, contenant de pointeurs, ce tableau a une longueur de taille1*taille2. | |
|
| |
nawal soldat
Nombre de messages : 55 Age : 36 Localisation : chlef Loisirs : lecture Date d'inscription : 28/03/2007
| Sujet: Re: tableaux dynamiques Ven 11 Jan - 22:18 | |
| oui j'ai compris ce que tu veux dire,,mais lors de la compilation un message d'erreure apparait!! c'est qu'en donnant les valeurs de taille et taille2 que je passe!! - Code:
-
comme ça t'as crée une tableau d'une seule dimension, contenant de pointeurs, ce tableau a une longueur de taille1*taille2. oui c'est comme ca que je veux representer ma matrice; aurais-je faut par hasard???? | |
|
| |
Contenu sponsorisé
| Sujet: Re: tableaux dynamiques | |
| |
|
| |
| tableaux dynamiques | |
|