Pointeurs et langage C.

Slides:



Advertisements
Présentations similaires
Rappels C.
Advertisements

Utiliser OpenOffice Impress Prise en main La fenêtre OpenOffice Impress 1 1 Les menus d'OpenOffice (mêmes menus que pour Microsoft Word) 2 Affichage de.
Mode d'emploi de la Main Courante des Territoires.
Gestion des PJ Service National d'Enregistrement Dossier Unique.
CINI – Li115 1 Semaine 9 Algorithmes de tri ● Introduction ● Tri à bulle ● - principe ● - algorithme ● - efficacité ● Tri par sélection ● - principe, algorithme,
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
CINI – Li115 1 Semaine 10 Les pointeurs ● Notion d'adresse ● Déclaration et utilisation de pointeurs ● "Types pointeur" et initialisation des pointeurs.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
Les instructions pour la création de cette présentation sont incluses dans la page de commentaires de chaque diapositive. Dans le menu Affichage, cliquez.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
CINI – Li115 1 Semaine 11 Les pointeurs (suite) ● Tableaux et pointeurs ● Questions sur les pointeurs.
Powerpoint. Environnement Powerpoint Interface Powerpoint Aide Powerpoint Les onglets Ouvrir / Créer une présentation Enregistrement diaporama.
Tableaux en C Mardi 2/05.
Le Langage JavaScript pour le web
Semaine 8 Retour sur les tableaux : fonctions et récursivité
Masques et opérateurs de décalage
Synthèse TP 2 Codeblock 1 Les objectifs de ce tp sont :
Ajouter le code dans une page html
Correspondance B2i - Technologie
Les tableaux différencier les variables simples des variables indicées (ordonnées et numérotées) un identificateur unique désigne un ensemble, une collection.
Les boites texte et dossier
Environnement de développement des BD
Jean Guy Joly – Henri Martel Hebrard – J. Leblanc
Langage C Structure d'un programme Types Lire Ecrire Tester
Quelques Termes INFORMATIQUE ? ORDINATEUR ( Système Informatique)?
Chapitre 1 nombres, chaînes de caractères, booléens, et VARIABLES
Pas de variable globale
Tiré de: J.-M. Muller, Arithmétique des ordinateurs, Masson, 1989.
Eléments d’Informatique Cours11 – Allocation dynamique, listes chaînées Catherine Recanati.
Allocation dynamique de mémoire
Opérateurs Toute donnée informatique est stockée en mémoire sous la forme d'une combinaison de bits (mot machine). Les opérateurs bits permettent de modifier.
<nom du groupe de travail>
AO (Architecture des ordinateurs)
Séances de soutien Projet informatique 2A
Semaine 11 Les pointeurs (suite)
Les fonctions.
Module 6 la boîte .
Présentation multimédia avec open office
SIF-1053 Architecture de ordinateurs
Les chaînes de caractères et le langage C
Formation Microsoft® Office SharePoint® Server 2007
Gestion du cours Aissa Boulmerka.
Notions de pointeurs en C
Direction du système d’information et de la stratégie numérique
Programmation en C++ C++ de base
Diapositive de résumé OUVRIR UN FICHIER 5
Calcul Scientifique Initiation à SCILB
Eléments de base du langage C
1 Copyright © 2004, Oracle. Tous droits réservés. Extraire des données à l'aide de l'instruction SQL SELECT.
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
CountrySTAT / FENIX Aperçu globale de l’Editeur DSD dans la nouvelle plateforme CountrySTAT FORMATION DES POINTS FOCAUX SUR LE SYSTEME CountrySTAT/FENIX.
Comment personnaliser Microsoft SharePoint Site web
Les classes et les objets
Ajouter un titre de diapositive - 1
Comment utiliser l’application ?
Les structures de base Listes chainées. Listes Les listes(similaire aux tableaux) sont des structures informatiques qui permettent de garder en mémoire.
Réunions Lync Participer à une réunion Lync Aide-mémoire Lync 2013
Ajouter un titre de diapositive - 1
Ajouter un titre de diapositive - 1
Principes de programmation (suite)
QCM Pointeurs 2 / Q1 On considère la déclaration suivante : char *ptc ; ptc peut contenir : 1) des valeurs de variables de type caractère 2) des adresses.
Ajouter un titre de diapositive - 1
Conseils techniques pour votre PPT
Présentation Chaînage dynamique Retour sur les tableaux
Cliquez sur “Introduire chômage temporaire”
Eléments de base du langage C
Tapez les détails de votre événement ici
Modèle d’image de réseau social
App Inventor trucs Afficher une image depuis le Web ou Google Drive.
Tapez les détails de votre événement ici
Transcription de la présentation:

Pointeurs et langage C

Les pointeurs Définition Accès aux objets Opérations Ordre de stockage Pointeurs et tableaux Pointeurs et fonctions

Définition Le langage C est prévu pour accéder de manière simple et efficace à toute la mémoire Il fournit le type pointeur qui contient l'adresse d'une case mémoire Son type dépend de l'objet pointé. Certaines opérations arithmétiques sont autorisées L'accès à l'objet pointé est complet À droite du signe d'affectation pour récupérer la donnée À gauche pour la modifier Utilisez ce modèle pour créer des pages Web intranet au sujet de votre groupe de travail ou projet. Vous pouvez ajouter vos propres informations au contenu du modèle et même modifier la structure du site Web en ajoutant ou supprimant des diapositives. Les contrôles de navigation se trouvent sur le masque des diapositives. Pour les modifier, pointez dans le menu Affichage sur Masque, puis cliquez sur Masque des diapositives. Pour ajouter ou supprimer des liens hypertexte sur du texte ou des objets, ou modifier des liens hypertexte, sélectionnez le texte ou l'objet voulu, puis cliquez dans le menu Insertion sur Lien hypertexte. Une fois vos modifications terminées, supprimez ces commentaires pour diminuer la taille de vos fichiers HTML finaux. Pour plus d'informations, interrogez l'aide intuitive sur : Masque des diapositives Liens hypertexte

Définit selon le type de l'objet pointé Définition Un pointeur est : Une variable Contient une adresse Définit selon le type de l'objet pointé Utilisez ce modèle pour créer des pages Web intranet au sujet de votre groupe de travail ou projet. Vous pouvez ajouter vos propres informations au contenu du modèle et même modifier la structure du site Web en ajoutant ou supprimant des diapositives. Les contrôles de navigation se trouvent sur le masque des diapositives. Pour les modifier, pointez dans le menu Affichage sur Masque, puis cliquez sur Masque des diapositives. Pour ajouter ou supprimer des liens hypertexte sur du texte ou des objets, ou modifier des liens hypertexte, sélectionnez le texte ou l'objet voulu, puis cliquez dans le menu Insertion sur Lien hypertexte. Une fois vos modifications terminées, supprimez ces commentaires pour diminuer la taille de vos fichiers HTML finaux. Pour plus d'informations, interrogez l'aide intuitive sur : Masque des diapositives Liens hypertexte

Les pointeurs Définition Accès aux objets Opérations Ordre de stockage Pointeurs et tableaux Pointeurs et fonctions

Déclaration d'un pointeur Type *nomVariablePointeur par exemple int *ptrInt ; // un pointeur sur un entier char *ptrCaractere ; // ptr sur char float *ptrReel ; //pointeur sur un réel Quelle est la taille des variables, en octets, pour chacune de ces déclarations ?

Manipulation de pointeur Deux opérateurs disponibles : & et * & permet d'obtenir l'adresse d'une case mémoire * permet de récupérer la valeur pointée par le pointeur Un pointeur, comme toute variable, doit être initialisé avant son utilisation

Manipulation de pointeur Affectation à partir d'une adresse : int *ptrInt; //ptrInt est un pointeur sur un entier int x ; // x est un entier int y ; // y est un entier x = 10; y = 20; ptrInt = &x; y = *ptrInt; x = 30; y = 40; Faites le plan mémoire correspondant à ces déclarations Indiquez la valeur des variables après chaque instruction

Les pointeurs Définition Accès aux objets Opérations Ordre de stockage Pointeurs et tableaux Pointeurs et fonctions

Opérations sur les pointeurs en C On peut affecter un pointeur à partir d'un autre int tab[100] ; int *p, *q ; q = tab ; p = q ; On peut mettre à jour le contenu pointé *p = 10 ; Que réalise la dernière instruction ?

Arithmétique des pointeurs On peut : Ajouter à un pointeur un entier (p et q : ptr) p = p + 2; Retrancher à un pointeur un entier q = q - 3; Effectuer la différence entre deux pointeurs int dif = p - q;

Arithmétique des pointeurs On ne peut pas Ajouter les pointeurs Multiplier les pointeurs Diviser les pointeurs Pour quelles raisons certaines opérations arithmétiques sont-elles interdites ?

Les pointeurs Définition Accès aux objets Opérations Ordre de stockage Pointeurs et tableaux Pointeurs et fonctions

Ordre de stockage La structure de mémoire est basée sur une unité atomique de 1 octet et un incrément d'adresse de 1 octet. Quand un ordinateur enregistre un entier sur 32 bits en mémoire, par exemple 0xA0B70708 en notation hexadécimale, il l'enregistre les octets dans l'ordre qui suit : A0, puis B7, puis 07, puis 08.

Ordre de stockage L'octet de poids le plus fort de 0xA0B70708 (ici A0) est enregistré à l'adresse mémoire la plus petite, l'octet de poids inférieur (ici B7) est enregistré à l'adresse mémoire suivante et ainsi de suite. Adresse mémoire Valeur en hexa BFAE45A4 08 BFAE45A3 07 BFAE45A2 B7 BFAE45A1 A0 Big Endian

Ordre de stockage Little Endian L'octet de poids le plus faible de 0xA0B70708 (ici 08) est enregistré à l'adresse mémoire la plus petite, l'octet de poids supérieur (ici 07) est enregistré à l'adresse mémoire suivante et ainsi de suite. Adresse mémoire Valeur en hexa BFAE45A4 A0 BFAE45A3 B7 BFAE45A2 07 BFAE45A1 08 Little Endian

Les pointeurs Définition Accès aux objets Opérations Ordre de stockage Pointeurs et tableaux Pointeurs et fonctions

Pointeurs et tableau Le nom d'un tableau correspond à son adresse. Il est possible de le manipuler à l'aide de pointeurs : int tabA[10]; int *ptrA; ptrA = tabA; ptrA = tabA + 9; ptrA = tabA + 10; ptrA = tabA + 11; ptrA = tabA - 1; Indiquez les instructions permises et leurs résultats

Donnez le mapping mémoire pour les points A et B int main() { int a = 1; int b = 2; int c = 3; int *p1, *p2; p1=&a; p2=&c; *p1=(*p2)+1; A) *p1=(*p2)++; p1=p2; p2=&b; *p2=(*p2)*(*p1); B) return 0; } Donnez le mapping mémoire pour les points A et B

Les pointeurs Définition Accès aux objets Opérations Ordre de stockage Pointeurs et tableaux Pointeurs et fonctions

Pointeurs et fonctions void change(int v1, int v2) { int tmp ; tmp = v1 ; B v1 = v2 ; v2 = tmp ; C } int main() { int val1, val2 ; val1 = 1 ; val2 = 2 ; A change(val1,val2) ; D return 0 ; } Donnez le mapping mémoire pour les points A, B, C et D

Pointeurs et fonctions void change(int *ptr, int *ptr2) { int val1 ; val1 = *ptr ; B *ptr2 = val1 ; *ptr = 0 ; C } int main() { int val1, val2 ; int *ptrVal1 ; val1 = 1 ; val2 = 2 ; ptrVal1 = &val1 ; A change(ptrVal1,&val2) ; D return 0 ; } Donnez le mapping mémoire pour les points A, B, C et D

Opérateur de cast unsigned char *ptrOctet; int unEntier; Il permet de forcer le type unsigned char *ptrOctet; int unEntier; ptrOctet = &unEntier; warning: assignment from incompatible pointer type unsigned char *ptrOctet; int unEntier=0x12345678, i; ptrOctet = (char *)&unEntier ; for(i=0;i<sizeof(unEntier);i++){ printf("%04X : %02X\n", ptrOctet, *ptrOctet) ; ptrOctet++; } Le mode de stockage est-il big ou little endian ?

Allocation mémoire type Taille du type Allocation statique int tab[20] ; Allocation dynamique int *tab ; tab = (int *) malloc ( 20 * sizeof(int) ) ; type Taille du type Nombre de "cases" à réserver

Allocation mémoire Allocation dynamique et chaîne de caractères char *tab ; tab = (char *) malloc ( 20 * sizeof(int) ) ;

Allocation mémoire Allocation statique et chaîne de caractères char nom[50] ; char prenom[50] ; char adr[100] ; strcpy(nom,"toto") ; // perte de 45 octets strcpy(prenom,"titi") ; // perte de 45 octets strcpy(adr,"rien") ; // perte de 95 octets // en tout 200 octets réservés pour seulement 15 utilisés

Allocation mémoire Allocation dynamique et chaîne de caractères char *nom ; char *prenom ; char *adr ; nom = (char *) malloc ((strlen("toto")+1) * sizeof(char)) ; strcpy(nom,"toto") ; prenom = (char *) malloc ((strlen("titi")+1) * sizeof(char)) ; strcpy(prenom,"titi") ; adr = (char *) malloc ((strlen("rien")+1) * sizeof(char)) ; strcpy(adr,"toto") ; // en tout 15 octets réservés pour 15 utilisés

Allocation mémoire Allocation dynamique et chaîne de caractères avec intéraction utilisateur : char *nom ; char *prenom ; char buffer[50]; scanf("%s",buffer) ; nom = (char *) malloc ((strlen(buffer)+1) * sizeof(char)) ; strcpy(nom,buffer) ; prenom = (char *) malloc ((strlen(buffer)+1) * sizeof(char)) ; strcpy(prenom,buffer) ;

Libération de la mémoire Pour libérer la mémoire alloué dynamiquement on utilise la fonction free. char *nom ; char buffer[50]; scanf("%s",buffer) ; nom = (char *) malloc ((strlen(buffer)+1) * sizeof(char)) ; strcpy(nom,buffer) ; free(nom) ;

Résumé Un pointeur est une variable contenant l'adresse mémoire d'une valeur typée. val : valeur de la variable &val : adresse de la variable val *ptrVal : valeur se trouvant à l'adresse donnée par ptrVal Attention au type du pointeur → le nombre d'octets d'un incrément dépend de la taille du type