• Aucun résultat trouvé

TD : Pointeurs (pdf 25 Ko)

N/A
N/A
Protected

Academic year: 2022

Partager "TD : Pointeurs (pdf 25 Ko)"

Copied!
2
0
0

Texte intégral

(1)

Langage C++

TD Pointeur

01/10/03

David Saint-Mellion page 1/2

1. Qu’est ce qu’un pointeur ?

2. Quelle diffé rence y a t-il entre les instructions int nbre=5566 et int *variable=&nbre ? Quelle différence y a t-il entre int var = 55567 et int &y=var ?

3. On déclare int nbre=0. Que représente nbre en terme d’implantation dans la machine informatique ? 4. On réalise la séquence ci-dessous. Donnez les valeurs à l’issue de l’exécution de chaque instruction.

&car car *ptrNbre ptrNbre

char car = 0x35 ; 0x0066fe80 char *ptrNbre=&car ;

*ptrNbre = 0x37 ; car=0x39 ;

ptrNbre++ ;

5. Soit la séquence ci-dessous

1 2 3 4

short nbre = 1000 ; short &refNbre = nbre ; const short *ptr1 = &nbre ; short *const ptr2 = &nbre ;

Parmi les instructions de 1 à 4, quelles sont celles qui sont équivalentes ?

5 6 7 8 9 10 11

12 13

14

15

nbre++ ; refNbre++ ; ptr1++ ; ptr2++ ;

*ptr1 = 0X1111 ;

*ptr2 = 0X2222 ; if (*ptr1==0) {

//--- ; }

for(int i=0 ;i<50 ;i++){

refNbre=i+ptr2 ; //--- ; }

do {

//--- ; } while((*ptr1)++!=0);

while((*ptr2)++==0){

//--- ; }

Parmi les instructions, quelles sont celles qui sont illicites ?

Quel est le résultat de l’exécution des l’instructions :

sizeof(refNbre) sizeof(ptr1)

6. Soit la séquence ci-dessous :

short dimension[8] = {150, 202, 331,440} ;

short *ptr = dimension ; // Remarque : dimension vaut 0x00CC8800 short *ptr2 = &dimension[2] ;

short x1 = 0 ; short x2 = 0 ; short x3 = 0 ;

x1 = *ptr ; ptr = ptr+3 ; x2 = *ptr ; x3 = (*ptr)+1 ; ptr = ptr+2 ; dimension++;

(*dimension)++;

Quelle est l’instruction illicite ?

La séquence est exécutée, complétez le tableau ci-après.

(2)

Langage C++

TD Pointeur

01/10/03

David Saint-Mellion page 2/2

Valeur à l’issue de l’exécution de la séquence ptr2

*ptr2 x1 x2 x3 ptr

*ptr

dimension[0]

7. On dispose de 50 000 éléments stockés en mémoire de manière contiguë. Les éléments sont des valeurs codées sur 2 octets. L’adresse du premier élément se situe à l’adresse 0x0066fe00. On dispose d’une variable nommé tab qui contient cette valeur d’adresse.

§ De quel type de base du langage C++ est un des éléments stocké en mémoire ? Donnez l’instruction qui permet de déclarer une variable pointeur sur le premier élément stocké. Cette variable se nomme ptrDebut.

§ On définit un pointeur sur le dernier élément qui se nomme ptrFin. Donnez l’instruction qui permette de le déclarer.

§ Proposez une instruction qui affecte la valeur 0X3503 au 3ème élément.

§ On veut compter combien d’éléments ont la valeur 0. Proposez l’élément de programme qui réalise cette opération. Vous utiliserez une instruction for avec une variable de boucle initialisée à 0.

§ On veut connaître l’index du premier l’élément qui à la valeur 99. Un élément du tableau a au moins cette valeur.

Donnez l’élément de programme qui réalise cette opération.

8. Soit un composant de communication.

Il est constitué de 3 registres : Contrôle, Emission, Réception. Les registres contiennent des valeurs codées sur 8 bits.

Ces registres sont implantés aux adresses suivantes : - Contrôle à Adresse de base + 1

- Emission à Adresse de base + 3 - Réception à Adresse de base + 5

« Adresse de base » est une valeur codée sur 32 bits. On définit 3 variables : regControle, regEmission et regReception, de type pointeur pour représenter les registres. On dispose d’une fonction fAdeBase()qui retour la avleur de « Adresse de Base ».

Elle est typée comme suit : *char fAdeBase(void)

§ Que retourne la fonction fAdeBase() ;

§ De quel type de base du langage C++ sont les objets stockés dans les registres ?

§ Proposez le code d’une séquence qui déclare et initialise les variables regControle, regEmission et regReception.

§ Donnez l’instruction qui pose la valeur 0x39 dans le registre Emission.

§ Donnez l’instruction qui prélève le contenu du registre Réception et affecte la valeur à la variable carLu.

§ Que représente l’opération regReception-regControle ?

9. Le composant est modélisé par une classe « ComposantCom ».

Elle comprend :

3 attributs qui représentent les adresses des 3 registres . 3 méthodes :

le constructeur // Initialise les attributs à partir de l’adresse de base passée en paramètre lireRéception() // Retourne la valeur contenue dans le registre de Réception

ecrireEmission() // Pose la valeur passée en paramètre dans le registre d’Emission

• Donnez la déclaration de la classe en langage C++ .

• Donnez le corps des fonctions de la classe codé en langage C++.

• Proposez le fragment de code qui permettra d’instancier cette classe. La fonction fAdeBase()sera mise en œuvre pour obtenir Adresse de Base.

Références

Documents relatifs

Celui-ci s’utilise de la même manière qu’un pointeur si ce n’est qu’il est possible d’opérer deux indirections : une pour atteindre le pointeur référencé et une

Utiliser cette fonction dans la feuille excel en plaçant trois nombres dans 3 cellules.. Même exercice en définissant une fonction qui détermine si tous les nombres sont

Une pièce est déclarée valide si la valeur de sa cote est comprise entre la cote minimum et la cote maximum.. Au tableau cote[] est associé un tableau

A cette fin, le tableau pieceValide est parcouru pour identifier si la pièce est trop grande puis, dans le tableau cote, la valeur de la mesure est analysée pour savoir si elle est

Proposez l’extrait de programme qui calcule la moyenne des 3 matières (math, anglais, informatique) et qui renseigne le membre moyenne de la variable dupont.. Proposez d’extrait

A la fin de l’acquisition de la série, le tableau resulat contient les valeurs de la série et le nombre d’éléments constituant la série est portée par nbreResultats.. Pour

De quel type d’organisation de données, en langage C++, est proche cette classe..

SITUATION : Vous êtes en stage chez IKEA, magasin d’ameublement suédois, et vous êtes affecté au service réception. Nous sommes le 13 mars et vous assistez un