Modifié un pointeur dans une fct en C

Fermé
rocksider Messages postés 106 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 16 mars 2012 - 10 avril 2009 à 01:11
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 10 avril 2009 à 12:30
Bonjour,
je voudrai pouvoir changer l'adresse du pointeur v à l'aide de la fct sans avoir a retourné la chaine,
et avec le code que j'ai en dessous je peux changer juste le contenu et non l'adresse, auriez vous une idée pour remedier au probleme ? et merci d'avance ^^
voici le code:

int fct(char *ex)
{
ex++;
}

int main(void)
{
char c[10],*v;
int a;
v=c;
printf("avant: %d",v);
a=fct(v);
printf("apres: %d",v);
return 0;
}

3 réponses

rocksider Messages postés 106 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 16 mars 2012 9
10 avril 2009 à 01:40
J'ai trouvé avec un peu de chance, xD, esseye de le comprendre au moment meme :
Merci tous de meme ^^
#include<stdio.h>

void fct(char **ex)
{
(*ex)++;
}

int main(void)
{
char c[10],*v;
v=c;
printf("avant: %d",v);
fct(&v);
printf("\napres: %d",v);
return 0;
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
10 avril 2009 à 02:04
un peu de chance
Donc j'imagine que tu sais pas trop pourquoi il faut faire comme ça ^^.

Petite explication.
En C, lorsque tu envoies un type natif (int, char, ...) en tant qu'arguments, celui-ci se fait par copie. Ainsi si tu souhaites modifier une variable (int par exemple) dans une fonction, il te faudra utiliser un pointeur.
Il en va de même pour modifier le pointeur lui-même. Si tu mets un simple pointeur, cela sera la copie de l'adresse de la zone pointée. Ainsi pour modifier l'adresse du pointeur dans la fonction, il faut utiliser un pointeur sur le pointeur, soit un double pointeur.
J'espère que c'est plus clair.

Cdlt
0
rocksider Messages postés 106 Date d'inscription mardi 21 octobre 2008 Statut Membre Dernière intervention 16 mars 2012 9
10 avril 2009 à 03:11
Ué c'est plus clair :) merci bcp fiddy ^^ (y)(y)
au fait on utilise le meme truc ( les **) si on veut passer en parametre une matrice,comment celà ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
10 avril 2009 à 12:30
au fait on utilise le meme truc ( les **) si on veut passer en parametre une matrice,comment celà ?
Non, on utilise plutôt :
void exemple(int argument[][TAILLE]);
ou
void exemple(int (*argument)[TAILLE]);

Note : Aucune différence entre les deux notations.
Cdlt
0