Bonsoir à tous,
Dans le cadre d'un exercice je travaille avec un tableau de pointeur du type Livre (type créé par moi même) afin de gérer une "bibliothèque".
J'aimerai écrire une fonction qui permet, à partir d'un indice du tableau, de décaler tous les livres d'un tableau de livre vers la droite.
Le tableau a suffisamment de place pour le permettre.
La signature de la fonction : void decalerStock (Livre *s, int taille, int indice);, indice à partir duquel il faut décaler les éléments de s & taille : nombre d'éléments dans s.
Voici ma proposition :
J'ai l'impression cependant que ça revient à faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Livre *intermediaire = malloc( (taille-indice)*sizeof(Livre)); //j'alloue un tableau intermédiaire de la taille exacte nécessaire for(int i=indice ; i<taille; ++i){ //je remplis mon tableau intermediaire des taches à déplacer intermediaire[i-indice]=s[i]; } for(int j=indice+1 ; j<=taille ; ++j){ s[j]=intermediaire[j-indice-1]; } free((void*)intermediaire);
Mais dans les 2 cas, j'ai l'impression que je fais une erreur au niveau des pointeurs, pouvez-vous m'aider svp ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for(int i=taille-1 ; i>indice ; --i){ s[i]=s[i-1]; //on fait pointer chaque indice de i vers l'indice précédent }
Merci d'avance,
EDIT :
En schématisant le problème, j'ai réalise que chaque pointeur d'indice i doit pointer vers l'adresse contenue par le pointeur d'indice i-1
Cela reviendrait à faire :
Cependant, ai-je le droit d'écrire cela (notamment *s[i-1] dans le cas où s est de type Livre que j'ai créé)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for(int i=taille ; i>indice ; --i){ s[i]=*s[i-1]; Le pointeur i (de type livre) pointe vers l'adresse contenue par le pointeur i-1 }
Merci encore d'avance,
Partager