Cela ne signifie absolument pas que la zone mémoire référencée par cette adresse est valide, bien au contraire, mais plutôt que cette adresse est valide. Il est donc garantit que cette adresse ne sera pas le pointeur NULL par exemple, ni toute autre valeur spéciale qu'un pointeur ne peut pas stocker. Il sera donc possible de faire des calculs d'arithmétique des pointeurs avec cette adresse, même si elle ne devra jamais être déréférencée, sous peine de voir le programme planter. On prendra garde à certaines subtilités. Les conversions implicites sont une facilité introduite par le compilateur, mais en réalité, les tableaux ne sont pas des pointeurs, ce sont des variables comme les autres, à ceci près: leur type est convertible en pointeur sur le type de leurs éléments. Pointeur sur tableau streaming. Il en résulte parfois quelques ambiguïtés lorsqu'on manipule les adresses des tableaux. En particulier, on a l'égalité suivante:
&tableau == tableau
en raison du fait que l'adresse du tableau est la même que celle de son premier élément.
Pointeur Sur Tableau Streaming
Pointeurs sur les tableaux
Next: Liste chaînée
Up: Présentation de la notion
Previous: Présentation de la notion
Contents
On va voir qu'un même pointeur pourra être associé à des
tableaux de profil différent à condition qu'ils soient de même
rang. PROGRAM Ptr_tab
IMPLICIT NONE
integer, dimension (3), target:: t1 = 1
integer, dimension (5), target:: t2 = 2
integer, dimension (:), pointer:: p1, p2
p1 => t1
p2 => t2
p1(2:3) = p2(4:5)
print*, t1, t2, p1, p2
p1 => t1(1:2)
p1 = 3
END PROGRAM Ptr_tab
signifie que est associé à et est associé à
est une affectation de la section du tableau à la section
du tableau
donne t1=p1 = 1 2 2 et t2=p2 = 2 2 2 2 2
signifie que est asscocié à la section et que
l'instruction
p1 =3
modifie uniquement cette section (très fort)
donne t1=p1 = 3 3 2 et t2=p2 = 2 2 2 2 2
Mazen Saad
2002-12-12
h>
int i, a = 3, b = 7, c = 1;
int *Tab[3];
Tab[0] = &a;
Tab[1] = &b;
Tab[2] = &c;
printf("Adresse =%d \t Valeur =%d \n", Tab[i], *Tab[i]);}
Adresse = -276735276 Valeur = 3 Adresse = -276735280 Valeur = 7 Adresse = -276735284 Valeur = 1 Vous pouvez également utiliser un tableau de pointeurs sur un caractère pour stocker une liste de chaînes comme suit: Exemple 7: #include < stdio. Pointeur sur tableau de la. h>
int i = 0;
char *noms[4] = {
"ESSADDOUKI Mostafa",
"KAYOUH Mohamed",
"ESSADDOUKI Ismail",
"SEKHRA Omar"};
for (i = 0; i < 4; i++)
printf("noms[%d] =%s\n", i, noms[i]);}
noms[0] = ESSADDOUKI Mostafa noms[1] = KAYOUH Mohamed noms[2] = ESSADDOUKI Ismail noms[3] = SEKHRA Omar Vous pouvez également utiliser un tableau de pointeurs pour stocker un tableau 2D Exemple 8: #include < stdio. h>
#include < stdlib. h>
// allocation de la mémoire pour chaque élément de Tab
Tab[i] = (int *)malloc(4 * sizeof(int)); // chaque ligne contient 4 colonnes de type entier}
// remplir le tableau par (i*j)
*(*(Tab + i) + j) = i * j;}}
// afficher les éléments du Tab
Tab[0][0] = 0 Tab[0][1] = 0 Tab[0][2] = 0 Tab[0][3] = 0 Tab[1][0] = 0 Tab[1][1] = 1 Tab[1][2] = 2 Tab[1][3] = 3 Tab[2][0] = 0 Tab[2][1] = 2 Tab[2][2] = 4 Tab[2][3] = 6
Partager ce cours avec tes amis: