Aller plus loin


Les pointeurs pointent dans la RAM mais pourquoi tout le monde l'utilise ?
Car ils sont très pratiques. Je vais vous expliquer trois façons différentes pour utiliser les pointeurs.

La première est l'utilisation par "référence". Connaitre l'adresse d'une variable dans la RAM permet de pouvoir la passer à n'importe quelle fonction en paramètre et donc que la fonction puisse modifier sa valeur.
Il est vrai que vous avez pu tomber sur cette problématique. Créer une fonction qui modifie une variable n'importe où dans votre programme.
Nous allons donc créer une fonction qui prend en paramètre l'adresse d'une variable et un entier qu'on lui incrémentera.

void incrementerVariable(int& mavar, int inc)
{
	mavar += inc;
}

int _tmain(int argc, wchar_t* argv[])
{
	int mavariable = 10;
	printf("adresse de mavariable : %p\n", &mavariable);
	printf("valeur de mavariable : %d\n\n", mavariable);

	incrementerVariable(mavariable, 20);
	printf("adresse de mavariable : %p\n", &mavariable);
	printf("valeur de mavariable : %d\n\n", mavariable);

	return 0;
}


>>>adresse de mavariable : 001DFA9C
valeur de mavariable : 10

adresse de mavariable : 001DFA9C
valeur de mavariable : 30


La deuxième façon d'utiliser les pointeurs est par "généricité". C'est la façon utilisée dans le cours. Avoir une seule variable qui peut se déplacer à plusieurs endroits dans la mémoire.
int* mavariable = new int[2];
mavariable[0] = 5;
mavariable[1] = 10;
mavariable[2] = 15;

printf("%d\n", *mavariable);

/*mavariable += 1;
mavariable = mavariable + 1;
mavariable = &(*(mavariable + 1));*/

mavariable++;
printf("%d\n", *mavariable);

mavariable++;
printf("%d\n", *mavariable);

>>>5
10
15


La dernière façon d'utiliser les pointeurs est pour garder une valeur dans la mémoire même après être sortie de sa porté. On appelle cela l'"allocation dynamique". Cette variable ne sera jamais supprimée de la mémoire tant que vous ne le dite pas.
#include <stdlib.h>

int* creerVariable()
{
	int* mavariable = new int(25);
	printf("On creer un variable :\n");
	printf("A l'addresse : %p\n", &*mavariable);
	printf("Avec la valeur : %d\n\n", *mavariable);

	return mavariable;
}

int _tmain(int argc, wchar_t* argv[])
{
	int* i = creerVariable();

	printf("Apres la porte de creation :\n");
	printf("A l'addresse : %p\n", &*i);
	printf("Toujours la valeur : %d\n\n", *i);

	free(i);

	printf("Apres avoir supprimer manuelement la variable :\n");
	printf("A l'addresse : %p\n", &*i);
	printf("la valeur : %d (tout et n'importe quoi)\n\n", *i);

	return 0;
}


>>>On creer un variable :
A l'addresse : 008A5D68
Avec la valeur : 25

Apres la porte de creation :
A l'addresse : 008A5D68
Toujours la valeur : 25

Apres avoir supprimer manuelement la variable :
A l'addresse : 008A5D68
la valeur : 9105360 (tout et n'importe quoi)