TD : Les pointeurs Exercice 1 : Soit le programme suivant : main ( ) { int A = 1 ; int B = 2 ; int C = 3 ; int *p1, *p2 ; p1= &A ; p2 = &C ; *p1 = (*p2) ++ ; p1 = p2 ; p2 = &B ; *p1 - = *p2 ; ++ *p2 ; *p1 * = *p2 ; A = ++ *p2 * *p1 ; p1 = &A ; *p2 = * p1/ = *p2 ; return 0 ; } Complétez le tableau suivant pour chaque instruction du programme ci-dessus : A B C P1 P2 Initialisation 1 2 3 / / p1 = &A 1 2 3 &A / p2 = &C *p1 = (*p2) ++ p1 = p2 ; p2 = &B © BEN HAMIDA Sana 1 *p1 - = *p2 ++ *p2 *p1 * = *p2 A = ++ *p2 * *p1 p1 = &A *p2 = * p1/ = *p2 Exercice 2 : Soient les déclarations suivantes : int A[ ] = {12, 23, 34, 45, 56, 67, 78, 89, 90} ; int * P ; P=A; Quels sont les résultats fournis par ces expressions : *P + 2 *(P+2) &P + 1 &A [4] – 3 A+3 &A [7] – P P + (*P – 10) *(P+ * (P + 8) – A [7] ) Exercice 3 : Écrire une fonction qui prend un tableau d'entiers, un entier n et un double pointeur vers un tableau d'entiers. La fonction doit allouer dynamiquement un nouveau tableau d'entiers de taille n, le remplir avec les n premiers éléments du tableau d'entiers d'entrée, et stocker l'adresse de ce nouveau tableau dans le double pointeur. Exercice 4 : Implémenter une pile avec deux pointeurs précédant et suivant. © BEN HAMIDA Sana 2