Vous êtes sur la page 1sur 2

Exercice 1 :

Ecrivez un programme ptr.cpp qui :


1. déclare un entier n ;
2. déclare une référence ref vers cet entier ;
3. déclare un pointeur ptr vers cet entier ;
4. dans les trois cas, imprimer la valeur de n et son adresse (en utilisant, n, ref et ptr).

#include<iostream>
using namespace std;
int main(){
int n = 4;
int &ref = n;
int *ptr = &n;
cout<<"les valeurs de n: "<<n<<" "<<ref<<" "<<*ptr<<endl;
cout<<"les adresses de n"<<&n<<" "<<&ref<<" "<<ptr<<endl;
return 0;}

Exercice 2 : Soit le modèle de structure suivant :


struct essai {
int n;
float x;
};
Ecrire une fonction nommée raz permettant de mettre à zéro les 2 champs d'une structure de
ce type transmise en argument :
1. Par adresse.
2. Par référence.
#include<iostream>
using namespace std;
struct essai {
int n;
float x;};
void raz_add(struct essai *ad);
void raz_ref(struct essai &ad);
int main(){
struct essai p;
p.n=2;
p.x = 3.7;
cout<<"avant \n";
cout<<p.n<<" "<<p.x<<endl;
//raz_add(&p);
//cout<<p.n<<" "<<p.x<<endl;
raz_ref(p);
cout<<p.n<<" "<<p.x<<endl;}
void raz_add(struct essai *ad){
ad->n=0; ad->x=0;}
void raz_ref(struct essai &ad){
ad.n=0; ad.x=0;}
Exercice 3 : Ecrire une fonction qui prend en arguments deux chaines de caractères s1 et s2 et
renvoie 1 si la taille de s1<s2, 0 sinon.
bool estCourte(const string &s1, const string &s2)
{return s1.size() < s2.size();}

Donner le résultat de programme ci-dessous, puis tester le sur la machine

char &get_val(string &str, int ix)


{return str[ix]; }
int main(){
string s("a value");
cout << s << endl;
get_val(s, 0) = ’A’;
cout << s << endl ;
return 0;}
Sortie
a value
A value
Exercice 4 : La fonction f() effectue la transmission par référence de sa valeur de retour. Les
exemples ci-dessous sont-ils corrects ? Justifier votre réponse ?

1. Exemple 1: 2. Exemple 2: 3. Exemple 3:


int n = 3; int n = 3;
int & f(); float x = 3.5; float x = 3.5;
float x; int & f (...) const int & f(...)
x = f(); { {
// OK : on convertira en int la ... ...
valeur située à la référence return 5; return 5;
// reçue en retour de f return n; return n;
return x; return x;
} }
// cette fois l’en-tête de f2
return 5;//erreur, transmission mentionne
d’adresse ne peut etre une // la référence à un entier
valeur canstante constant
return n; // OK return 5 ; // OK : on renvoie
return x; // erreur : f() renvoie la référence à une copie
a reference a un int temporaire de 5
return n ; // OK
return x ; // OK : on renvoie
la référence à un int
temporaire
// obtenu par conversion de
la valeur de x
4. Exemple 4:
const int & f(...);
int n;
float x;
...
f() = 2*n + 5; // erreur : f()
n’est pas une lvalue
f() = x; // idem

Vous aimerez peut-être aussi