Pb pointeur en C

Fermé
Blaze - 14 oct. 2007 à 11:39
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 - 14 oct. 2007 à 15:53
Bonjour,

J'ai un petit souci avec les pointeurs.
Le code ci-après permet d'inverser les caractères de la chaine du tableau de caratères Tab[21].
Je ne comprends pas comment la ligne
puts(Tab);
récupere le traitement effectué par les pointeurs ptr1 et ptr2.

Est-ce que quelqu'un peut m'expliquer.

Merci pour votre aide.


#include <stdio.h>
int main()
{
char Tab [21]= {"Ceci est un exemple"};
char *ptr1, *ptr2;
char temp;

ptr1=ptr2=Tab;

while (*ptr2) ptr2++;
ptr2--;
while(ptr1<ptr2)
{
temp=*ptr1;
*ptr1=*ptr2;
*ptr2= temp;
ptr1++;
ptr2--;
}
printf("\n\n ");
puts(Tab);

printf("\n\n");
return 0;
}

12 réponses

sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 oct. 2007 à 11:48
bonjour

puts, sert a afficher des chaines de caractères.

ca reviens a avoir fais

printf("%s", Tab);
0
Bonjour Sfel

Oui ,je sais que puts permet d'afficher les chaines de caratères.
Dans mon cas, ce que je ne comprends pas c'est comment les pointeurs ptr1 et ptr2
ont modifié le contenu du tableau TAB puisqu'i n y a aucune instruction pour cela après le
bloc du while.
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
14 oct. 2007 à 12:11
char Tab [21]= {"Ceci est un exemple"};
char *ptr1, *ptr2;

ptr1=ptr2=Tab;

temp=*ptr1; c'est équivalent à temp=Tab[0] ;

en incrémentant ptr ptr++, c'est comme utiliser Tab[n] ;

ptr c'est le pointeur (l'adresse de Tab) et *ptr c'est le contenu, donc 1 caractère
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 oct. 2007 à 12:19
#include <stdio.h>
int main()
{
char Tab [21]= {"Ceci est un exemple"};
int i, j;
char temp;

i=0;
j=0;

while (tab[j]) j++;
j--;
while(i<j)
{
temp=Tab[i];
Tab[i]=Tab[j];
Tab[j]= temp;
i++;
j--;
}
printf("\n\n ");
puts(Tab);

printf("\n\n");
return 0;
}


je te donne l'équivalent sans les pointeurs
pour que tu comprenne la logique
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
OK! Tout est clair et ça encourage à continuer l'apprentissage.

Grand Merci à Sfel et Dubcek.
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 oct. 2007 à 12:56
de rien
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
14 oct. 2007 à 14:47
prochain exercice, les pointeurs sur des fonctions qui retournent des tableaux de pointeurs sur des scructures ... :-))
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 oct. 2007 à 14:58
après des listes dynamiques.

et le C++ ^^
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
14 oct. 2007 à 15:05
et tout à la fin ... installer windoze
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 oct. 2007 à 15:14
nan, créer windoze

allez tu as jusqu'à jeudi ^^
0
dubcek Messages postés 18758 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 24 décembre 2024 5 623
14 oct. 2007 à 15:50
et ne pas oublier les options facultatives obligatoires : https://fr.wikipedia.org/wiki/%C3%89cran_bleu_de_la_mort
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 oct. 2007 à 15:53
loool

tin bill m'as copié

j'avai passé les miens en rouge sous 98, et XP ^^

et lui m'as copié dans Vista tsss

par contre quand un pote viens et qu'il voi l'écran rouge, il flippe + que pour un bleu ^^
0