discase
discase@mail.dotcom.fr |
>Correction du ernier exercice |
#include <stdio.h> int main() { char phrase[256]; // 256 caractères par ligne / amplement suffisant int NbMots[50]; // 50 lignes maximum int NbLignes = 0; int max = 0; printf("Le programme va vous demandez d'entrer des phrases au clavier, jusqu'à ce que vous tapiez 'FIN'\n"); while (1) { gets(phrase); if (strcmp(phrase,"FIN") == 0) // si phrase = "FIN" { // on parcourt le tableau du nb de mots for (i=0; i | l |
>Fonctionnement du programme |
>Définition simplifiée d'un pointeur |
int *PointeurInt; char *PointeurChar; double *PointeurDouble; | l |
>Opérations sur les pointeurs |
int a = 10; int *pa; pa = &a; | l |
int a = 10; int *pa; pa = &a; printf("%d\n",*pa); | l |
l | Il ne faut surtout pas confondre le signe "*" servant à la déclaration d'un pointeur et l'opérateur "*" placée avant un nom de variable qui renvoie la valeur stockée dans la variable pointée. |
>Récapitulatif |
Type_Pointé * Nom_Variable; | l |
+-----------------+----------------+ | pointeur p | variable a | +--------+-----------------+----------------+ |valeur | *p | a | |adresse | p | &a | +--------+-----------------+----------------+ | l |
>Opérations |
+------------+-----------------+ |Y = *P+1 | Y = X+1 | |*P = *P+10 | X = X+10 | |*P += 2 | X += 2 | |++*P | ++X | |(*P)++ | X++ | +------------+-----------------+ | l |
>Relation avec les tableaux |
int Tab[10]; int *PInt; | l |
PInt +----+ V - -+---+---+---+---+---+---+---+---+---+---+- - - - Tab | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | - -+---+---+---+---+---+---+---+---+---+---+- - - - | l |
(PInt+2) +------------+ V - -+---+---+---+---+---+---+---+---+---+---+- - - - Tab | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | - -+---+---+---+---+---+---+---+---+---+---+- - - - | l |
>Récapitulatif |
soit P un pointeur, (P+n) représente l'adresse de nième élément derrière P *(P+n) représente le contenu de la nième composante après P | l |
l |
Attention sous DOS !! Sous DOS, le système est en mode réel, c'est à dire quon peut accéder à toutes partie de la RAM
sans aucune précaution ... ainsi, après une déclaration telle que int Tab[2]; , Tab[15] ou *(Tab+15) ne donnent pas d'erreur, mais des résultats imprévisibles dans la plupart des cas. En effet, avec de telles manipulations en dehors des limites, vous empiétez sur la mémoire d'une autre application par exemple !!! |
>Pointeur et chaîne de caractères |
char Chaine[] = "Hello World"; | l |
char *Chaine; Chaine = "Bonjour tout le monde !!"; | l |
char *Chaine1 = "Bonjour"; char *Chaine2 = "Hello World"; | l |
char Tab1[] = "Bonjour"; char Tab2[] = "Hello World"; | l |
char *Chaine = "Bonjour"; char Tab[] = "Hello World"; | l |
>Interêt des pointeurs |