Cours:PointeursCpp : Différence entre versions
(→Tableaux et pointeurs) |
(→parcourir un tableau) |
||
| Ligne 118 : | Ligne 118 : | ||
==parcourir un tableau== | ==parcourir un tableau== | ||
| + | |||
| + | Un tableau est un pointeur vers la 1ère case de la zone mémoire allouée pour stocker ce tableau. | ||
| + | |||
| + | De ce fait [[Rouge|tab[3] et *(tab+3) ]] correspondent tous les 2 à la valeur de la même case mémoire. | ||
| + | |||
| + | <source lang=cpp> | ||
| + | </source> | ||
==allouer dynamiquement un tableau== | ==allouer dynamiquement un tableau== | ||
Version du 22 septembre 2022 à 08:00
Sommaire
Analyse de code
Simuler le fonctionnement de ce programme :
int main()
{
int n1=10;
int *n2=nullptr;
int n3=20;
int *n4=nullptr;
cout << &n1 << " " << n2 << " " << &n3 << " " << n4 << endl;
cout << n1 << " " << *n2 << " " << n3 << " " << *n4 << endl; // crash du programme
n2 = &n1;
n4 = n2;
cout << &n1 << " " << n2 << " " << &n3 << " " << n4 << endl;
cout << n1 << " " << *n2 << " " << n3 << " " << *n4 << endl;
n1 = 30;
*n2 = 40;
n4 = &n3;
n3 = 5;
cout << &n1 << " " << n2 << " " << &n3 << " " << n4 << endl;
cout << n1 << " " << *n2 << " " << n3 << " " << *n4 << endl;
return 0;
}
Fonction de permutation
Une fonction ne pouvant retourner qu'une valeur, il est difficile d'écrire une fonction sans utiliser ni pointeurs ni référence.
Il faut passer par une structure, ce qui donne qqch du genre :
struct struct_2int
{
int n1;
int n2;
};
struct struct_2int permutte(int a, int b)
{
struct struct_2int res;
res.n1=b;
res.n2=a;
return res;
}
int main(int)
{
int a,b;
struct struct_2int tmp;
tmp=permutte(a,b);
a=tmp.n1;
b=tmp.n2;
return 0;
}
Bon c'est pénible !
Du coup on va utiliser des pointeurs ou des références.
Ecrire 2 fonctions permutte, l'une avec 2 paramètres de type pointeurs et l'autre avec 2 paramètres de type référence
L'utilisation sera la suivante :
int main(int)
{
int a=5;
int b=3;
// on peut utiliser cin !!!
permutte(a,b); // passage par référence
//ou
permutte(&a,&b);//passage par adresse ( pointeur )
return 0;
}
|
Remarquons qu'il est possible d'avoir plusieurs fonctions du même nom, du moment qu'elles ont des signatures (paramètres d'entrée) différentes :
int maFonction(int a)
{
}
int maFonction(int a,int b)
{
}
int maFonction(float a)
{
}
|
Tableaux et pointeurs
parcourir un tableau
Un tableau est un pointeur vers la 1ère case de la zone mémoire allouée pour stocker ce tableau.
De ce fait tab[3] et *(tab+3) correspondent tous les 2 à la valeur de la même case mémoire.

