« Langage C/Pointeurs » : différence entre les versions

Contenu supprimé Contenu ajouté
m Add Syntaxhighlight
m Add Syntaxhighlight
Ligne 14 :
 
<syntaxhighlight lang="c">
int *ptr;
int x=10;
ptr=&x;
</syntaxhighlight>
 
Ligne 23 :
==== Accès direct et indirect à une variable: ====
 
<syntaxhighlight lang="c">
printf("accès direct sur la valeur de x: %d \n", x);
printf("accès indirectdirect sur la valeur de x: %d \n", *ptrx);
printf("accès directindirect sur la valeur de x: %d \n", x*ptr);
 
printf("accès direct sur l'adresse de x: %d \n", &x);
printf("accès indirect sur l'adresse de x: %d \n", ptr);
</syntaxhighlight>
 
Il faut bien comprendre que l'accès direct comme indirect agit sur la variable ''x''. C'est-à-dire que l’on modifie réellement la valeur de ''x'' dans les deux cas.
Ligne 34 ⟶ 36 :
 
==== Tableau simple ====
int *ptr;
int tab[10];
 
<syntaxhighlight lang="c">
ptr=tab;
int *ptr;
int tab[10];
 
ptr=tab;
</syntaxhighlight>
 
Pour un tableau, il n'y a pas besoin de recourir au caractère '&' car ''tab'' sans indice prend la valeur de l'adresse en mémoire du premier élément du tableau ''tab''.
Ligne 44 ⟶ 48 :
===== Accès au différents éléments d'un tableau =====
 
<syntaxhighlight lang="c">
for(x=0; x<10; x++)
*(ptr+x)= 0; // revient à dire "tab[x]=0"
</syntaxhighlight>
 
==== Tableau deux dimensions ====
 
<syntaxhighlight lang="c">
int *ptr;
int tab[2][6]*ptr;
int tab[2][6];
 
ptr=&tab[0][0];
</syntaxhighlight>
 
Le tableau à deux dimensions sera ainsi "déroulé" et ramené à un tableau simple. L'accès aux différents éléments du tableau se fait donc comme pour un tableau simple.
Ligne 60 ⟶ 68 :
Définissons une structure pour ensuite l’utiliser dans les différents exemples:
 
<syntaxhighlight lang="c">
typedef struct coord Coord;
 
struct coord{
int x;
int y;
char nom_point;
}pointsA;
</syntaxhighlight>
 
Il suffit ensuite de déclarer un pointeur de type struct nom_de_la_structure et de le faire pointer sur ''pointsA''.
 
<syntaxhighlight lang="c">
Coord *ptr;
Coord *ptr=pointsA;
ptr=pointsA;
</syntaxhighlight>
 
==== Accès aux éléments d'une structure ====
 
<syntaxhighlight lang="c">
printf("Accès direct à x= %d \n", pointsA.x);
printf("Accès indirectdirect à x= %d \n", ptr->pointsA.x);
printf("Accès directindirect à x= %d \n", pointsA.ptr->x);
printf("Accès direct à y= %d \n", pointsA.y);
printf("Accès indirect à y= %d \n", ptr->y);
</syntaxhighlight>
 
Comme on peut le constater, le '.' est remplacé par une flèche '->' lorsqu'on manipule les éléments d'une structure avec un pointeur. Il existe une autre méthode pour y accèder qui se rapproche plus de ce qui a été vu plus haut:
 
<syntaxhighlight lang="c">
printf("Autre accès indirect à x=%d \n", ((*ptr).x));
printf("Autre accès indirect à nom_pointx=%cd \n", ((*ptr).nom_pointx));
printf("Autre accès indirect à xnom_point=%dc \n", ((*ptr).xnom_point));
</syntaxhighlight>
 
=== Conclusion ===