« Langage C++/Pointeur, Tableaux et références » : différence entre les versions

Contenu supprimé Contenu ajouté
→‎Tableaux "Statiques" : selon discussion
Ligne 40 :
{{Définition
| contenu =
'''Syntaxe:''' <sourcesyntaxhighlight lang="cpp"><Type>* <NomPointeur>[ = <Valeur>];</sourcesyntaxhighlight>}}
 
Où <Type> est le type de la donnée en mémoire, "*" signifie que l’on a affaire à un pointeur, <NomPointeur> est l'identifiant du pointeur et <Valeur> l'adresse mémoire (unsigned long int) où le pointeur doit aller chercher la donnée.
Ligne 52 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
char x = 'A'; // création de la variable char en pile
char* p = &x; // création de la variable pointeur sur char en pile et affectation de l'adresse de la variable en pile.
</syntaxhighlight>
</source>
}}
 
Ligne 68 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
char x = 'A'; // création de la variable char en pile
char* p1 = &x; // création de la variable pointeur sur char en pile et affectation de l'adresse.
char* p2 = p1; // copie la valeur de l'adresse pointée par p1 dans le pointeur p2. (p2 == p1), (p2 == &x)
</syntaxhighlight>
</source>
}}
 
Ligne 85 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
char x = 'A'; // création de la variable char en pile
char* p = &x; // création de la variable pointeur sur char en pile et affectation de l'adresse.
char y = *p; // Déréférencement du pointeur "p" pour obtenir la valeur pointée (y == 'A')
</syntaxhighlight>
</source>
}}
 
Ligne 101 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
int a; // création de la variable int en pile (sizeof(int) == 4)
int* p = &a; // création de la variable pointeur sur int et affectation de l'adresse de a.
Ligne 117 :
y = p - 1; // (y == &a + 4 octets)
z = p - 1; // (z == &a)
</syntaxhighlight>
</source>
}}
 
Ligne 130 :
Il est inacceptable d’utiliser la forme calculée des pointeurs pour accéder à des tableaux. Seule la forme entre crochets est valide. Le jour où un développeur instanciera un tableau dynamique sur un pointeur utilisé sous forme calculée, le programme plantera car le compilateur sera incapable de faire les déréférencements. }}
Préférez donc la forme entre crochets
{{Exemple | contenu = <sourcesyntaxhighlight lang="cpp">a = t[2][3];</sourcesyntaxhighlight> }}
à la forme calculée
{{Attention|Avec_fond = oui|
{{Exemple | contenu = <sourcesyntaxhighlight lang="cpp"> a=*(t+2*3)); </sourcesyntaxhighlight> }}
}}
 
Ligne 159 :
{{Définition
| contenu =
'''Syntaxe:''' <sourcesyntaxhighlight lang="cpp"><Type> <NomTableau> [<Constante1>](...)[<ConstanteN>];</sourcesyntaxhighlight>
 
ou
 
<sourcesyntaxhighlight lang="cpp"><Type> <NomTableau> [<Constante1>](...)[<ConstanteN>] = {{<Variable11,...,Variable1M>},(...),{<VariableN1,...,VariableNM>}};</sourcesyntaxhighlight>
 
ou
 
<sourcesyntaxhighlight lang="cpp"><Type> <NomTableau> [](...)[] = {{<Variable11,...,Variable1M>},(...),{<VariableN1,...,VariableNM>}};</sourcesyntaxhighlight>
}}
 
Ligne 179 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Valeurs constantes
const int Grilles = 4;
Ligne 234 :
}
};
</syntaxhighlight>
</source>
}}
 
Ligne 378 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Valeur variable
int trois = 3;
Ligne 391 :
int c = pInt1[2]; // c == 3
 
</syntaxhighlight>
</source>
}}
 
Ligne 406 :
{{Définition
| contenu =
'''Syntaxe:''' <sourcesyntaxhighlight lang="cpp"><Type>* <NomVariable>[<Constante1>](...)[<ConstanteN>] = new <Type>[<Variable>][<Constante1>](...)[<ConstanteN>];</sourcesyntaxhighlight>}}
 
Où <Type> est le type du tableau, <NomVariable> est le nom identifiant du tableau, <Variable> est une variable entière non signée définissant la première dimension du tableau, <ConstanteN> sont des constantes entières non signées définissant les autres dimensions du tableau.
Ligne 415 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Valeurs constantes
const int vColonnes = 2;
Ligne 427 :
 
delete [] vTableau;
</syntaxhighlight>
</source>
}}
 
Ligne 446 :
{{Définition
| contenu =
'''Syntaxe:''' <sourcesyntaxhighlight lang="cpp"><Type> <NomTableau> = new <Type>[<Variable>];</sourcesyntaxhighlight>}}
 
Où <Type> est le type du tableau, <NomTableau> est le nom du tableau et <Variable> une variable entière non signée.
Ligne 458 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
 
Ligne 615 :
}
 
</syntaxhighlight>
</source>
}}
 
Ligne 624 :
{{Définition
| contenu =
'''Syntaxe:''' <sourcesyntaxhighlight lang="cpp"><TypeRetour> (*<NomPointeur>)(<TypeParametre><NomParametres>);</sourcesyntaxhighlight>}}
 
Où "<TypeRetour>" est le type de retour de la méthode à pointer, "<NomPointeur>" est le nom attribué au pointeur, "<TypeParametre>" et "<NomParametres>" sont respectivement les types et noms des paramètres de la méthode
Ligne 631 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Méthode
bool MaMethode(int MonParametre)
Ligne 642 :
// Appel de la méthode via le pointeur
bool a = LaMethode(8);
</syntaxhighlight>
</source>
}}
Remarquez bien les parenthèses autour de "*LaMethode". Si on ne les avait pas mis comme dans cet exemple :
Ligne 649 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Méthode
bool MaMethode(int MonParametre)
Ligne 660 :
// Appel de la méthode via le pointeur
bool a = LaMethode(8);
</syntaxhighlight>
</source>
}}
 
Ligne 676 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
//Classe
class MaClasse
Ligne 691 :
// Appel de la méthode via le pointeur
bool a = LaMethode(8);
</syntaxhighlight>
</source>
}}
 
Ligne 701 :
{{Définition
| contenu =
'''Syntaxe:''' <sourcesyntaxhighlight lang="cpp"><Type>& <NomRéférence> = <NomVariable>;</sourcesyntaxhighlight>}}
 
Où "<Type>" est le type de la référence "<NomRéférence>" est l'identifiant de la référence et <NomVariable> est l'identifiant de la variable que la référence doit désigner. Contrairement aux pointeurs, la référence doit impérativement être assignée dès la déclaration et il n’est pas possible de réassigner la référence à une autre variable après initialisation.
Ligne 710 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
//Variable à référencer
int MaVariable = 5;
Ligne 717 :
// Modification de la variable via la référence.
LaVariable = 8;
</syntaxhighlight>
</source>
}}
 
Ligne 727 :
{{Définition
| contenu =
'''Syntaxe:''' <sourcesyntaxhighlight lang="cpp"><Type> (&<NomRéférence>)(<TypeParam> <NomParam>) = <NomMéthode>;</sourcesyntaxhighlight>}}
 
Où "<Type>" est le type de retour de la méthode à référencer, "<NomRéférence>" est l'identifiant de la référence, <TypeParam> et <NomParam> sont respectivement le type et le nom de l'image des paramètres de la méthode à référencer et <NomMéthode> est l'identifiant de la méthode que la référence doit désigner. Contrairement aux pointeurs, la référence doit impérativement être assignée dès la déclaration et il n’est pas possible de réassigner la référence à une autre méthode après initialisation.
Ligne 734 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
bool MaMethode(int MonParametre)
{
Ligne 743 :
// Appel de la méthode via la référence.
bool a = LaMethode(8);
</syntaxhighlight>
</source>
}}
 
Ligne 773 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Création d'une variable "c" de type "char" non initialisée.
char c;
Ligne 779 :
// cast de la valeur constante 0x43 (0x43 = 'C') en char.
c = (char)0x43;
</syntaxhighlight>
</source>
}}
 
Ligne 787 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Création d'une variable "c" de type "char" non initialisée.
char c;
Ligne 797 :
// cast de la valeur de la variable ('A' = 0x41 = 65) en int.
i = (int)c;
</syntaxhighlight>
</source>
}}