/* IFT1166 - démonstration #5 - exercice 8 08-octobre-2005 v1.00 M.Lokbani énoncé+corrigé à partir d'Anderson. contact: lokbani@iro.umontreal.ca Cet exercice a pour but d'étudier les différentes façons possibles pour accéder à des éléments d'un tableau en en utilisant pour cela la notion de pointeur. Copyright (C) 2005 Université de Montréal Département d'informatique et de Recherche Opérationnelle M. Lokbani -- Tous Droits Réservés -- All Rights Reserved -- */ #include using namespace std; double vision[2][4] = { {1,2,3,4}, {5,6,7,8} }; int main() { cout << vision[1][2] << *(vision[1]+2) << (*(vision + 1))[2] << endl; cout << vision[1][0] << *(vision[1]) << **(vision + 1) << endl; return 0; } /* Vision est un tableau de 2 lignes et 4 colonnes. On utilisera l'index i pour itérer sur le nombre de lignes et l'index j pour itérer sur le nombre de colonnes. Pour les deux indexes, i et j, la valeur de départ sera égale à 0. -1- cout << vision[1][2] << *(vision[1]+2) << (*(vision + 1))[2] << endl; vision[1][2] ici i=1 correspond à la 2e ligne alors que j=2 correspond à la 3e colonne. De ce fait: vision[1][2] = 7 *(vision[1]+2) vision[1] est l'adresse du premier élément de la 2e ligne, i.e. vision[1][0]. En ajoutant 2, en réalité on avance de deux unités pour tomber sur le 3e élément i.e. vision[1][2] ceci explique l'affichage du 2e 7. (*(vision + 1))[2] Une 3e façon d'avoir vision[1][2]. D'abord vision est l'adresse du premier élément du tableau i.e. l'adresse de vision[0][0].(vision+1) retourne l'adresse du premier élément de la seconde ligne i.e. l'adresse de vision[1][0] et ici on cherche à accéder au 3e élément i.e. [2] donc vision[1][2], ceci explique l'affichage du 3e 7. 777 -2- cout << vision[1][0] << *(vision[1]) << **(vision + 1) << endl; vision[1][0] ici i=1 correspond à la 2e ligne alors que j=0 correspond à la 1ere colonne. De ce fait: vision[1][0] = 5 *(vision[1]) vision[1] est l'adresse du premier élément de la 2e ligne, i.e. vision[1][0]. Pour déréférencer un pointeur et aller chercher son contenu, on utilise *. *(vision[1]) retourne donc le contenu de vision[1][0] qui est 5. **(vision + 1) Une 3e façon d'avoir vision[1][0]. D'abord vision est l'adresse du premier élément du tableau i.e. l'adresse de vision[0][0].*(vision+1) est le point d'entrée de la seconde ligne i.e. l'adresse de vision[1][0]. **(vision + 1) correspond à vision[1][0] 555 */