Citation:
Envoyé par stokastik
Il faudrait vraiment que tu relise ce que j'écris...
tu as, en C, trois manière d'accéder à une variable quelconque:
- la variable elle meme: int variable
- un pointeur sur la variable: *pointeur
- un pointeur de pointeur sur la variable: int **pptr
variable te fournit la valeur meme de celle-ci (10)
pointeur te fournit l'adresse mémoire à laquelle tu trouvera la valeur de variable
pptr te fournit l'adresse mémoire à laquelle un pointeurs sur l'adresse à laquelle tu trouvera la valeur
Quand tu veux faire une allocation dynamique, tu dois allouer la mémoire à un pointeur.
variable =malloc(TAILLE*sizeof(int)) ne fonctionnera pas
pointeur=malloc(TAILLE*sizeof(int)) alloura la mémoire pour TAILLE entiers
pptr=malloc(TAILLE*sieof(int *)) allouera la mémoire pour TAILLE pointeur sur des entiers (sans allouer de mémoire pour les entiers en eux-meme
*pptr=malloc(TAILLE*sizeof(int)) allouera, si pptr a déjà la place pour contenir une valeur de pointeur, la mémoire pour TAILLE entiers
Quand tu passe un parametre à une fonction, tu crée une copie locale du type que tu passe en parametre
fonction(int param1) crée, lorsque tu l'appelle, une copie de type entier et de la valeur de la variable (ou de la constante) que tu passe en parametre...
Et c'est pareil, que tu utilises, dans ta fonction appelante, une variable, un pointeur ou un pointeur de pointeur... chaque fois que tu appellerea une fonction, tu créera un variable ou un pointeur ou un pointeur de pointeur local à la fonction appelée (selon le type indiqué par la fonction appelée)
La fonction ne modifiera donc pas la valeur (de la variable, du pointeur, ou du pointeur de pointeur) d'origine...
Si tu veux qu'elle le fasse, tu dois lui passer un pointeur si tu veux modifier modifier une variable (en lui passant l'adresse de ta variable sous la forme de &variable) ou un pointeur de pointeur si tu veux qu'elle modifie un pointeur (en lui passant l'adresse de ton pointeur sous la forme de &pointeur).
Seulement, dans la fonction appelée, tu dois donc prendre en compte que tu dispose d'un élément qui "vise l'adresse mémoire à laquelle se trouve la valeur passée en argument)
donc, si tu veux réellement modifier la valeur dans la fonction appelante, tu dois signaler de modifier "l'adresse mémoire pointée par" (ton pointeur ou ton pointeur de pointeur)