Différences entre les versions de « Langage C++/Pointeur, Tableaux et références »

(→‎Tableaux "Statiques" : selon discussion)
{{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.
| 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>
}}
 
| 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>
}}
 
| 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>
}}
 
| 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.
y = p - 1; // (y == &a + 4 octets)
z = p - 1; // (z == &a)
</syntaxhighlight>
</source>
}}
 
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> }}
}}
 
{{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>
}}
 
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Valeurs constantes
const int Grilles = 4;
}
};
</syntaxhighlight>
</source>
}}
 
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Valeur variable
int trois = 3;
int c = pInt1[2]; // c == 3
 
</syntaxhighlight>
</source>
}}
 
{{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.
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Valeurs constantes
const int vColonnes = 2;
 
delete [] vTableau;
</syntaxhighlight>
</source>
}}
 
{{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.
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
 
}
 
</syntaxhighlight>
</source>
}}
 
{{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
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Méthode
bool MaMethode(int MonParametre)
// 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 :
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Méthode
bool MaMethode(int MonParametre)
// Appel de la méthode via le pointeur
bool a = LaMethode(8);
</syntaxhighlight>
</source>
}}
 
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
//Classe
class MaClasse
// Appel de la méthode via le pointeur
bool a = LaMethode(8);
</syntaxhighlight>
</source>
}}
 
{{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.
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
//Variable à référencer
int MaVariable = 5;
// Modification de la variable via la référence.
LaVariable = 8;
</syntaxhighlight>
</source>
}}
 
{{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.
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
bool MaMethode(int MonParametre)
{
// Appel de la méthode via la référence.
bool a = LaMethode(8);
</syntaxhighlight>
</source>
}}
 
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Création d'une variable "c" de type "char" non initialisée.
char c;
// cast de la valeur constante 0x43 (0x43 = 'C') en char.
c = (char)0x43;
</syntaxhighlight>
</source>
}}
 
| contenu =
 
<sourcesyntaxhighlight lang="cpp">
// Création d'une variable "c" de type "char" non initialisée.
char c;
// cast de la valeur de la variable ('A' = 0x41 = 65) en int.
i = (int)c;
</syntaxhighlight>
</source>
}}
 
490

modifications