La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006.

Présentations similaires


Présentation au sujet: "Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006."— Transcription de la présentation:

1 Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006

2 Programmation Sommaire Bruno Permanne 2006 Programmation Instructions de bas niveau Manipulation de la mémoire Préprocesseur Les fonctions en C++ La portée des variables Programmation avancée C++

3 Instructions de bas niveau Opérateurs de manipulation de bits > & | ~ ^ Retour sommaire Bruno Permanne 2006 InstructionsAdresse Mémoire Contenu (décimal) Contenu (hexa) Contenu (binaire) unsigned char a;0x34FE (a)??? a=0x54;0x34FE840x a>>=2;0x34FE (a)210x unsigned char b=240,c; c=a&b; 0x34FE (a) 0x34FF (b) 0x3500 (c) x15 0xF0 0x c^=0xFF; ou c~=c; 0x34FE (a) 0x34FF (b) 0x3500 (c) x15 0xF0 0xEF c=a&1|0x30;0x34FE (a) 0x34FF (b) 0x3500 (c) x15 0xF0 0x a=(char) (b==240);0x34FE (a) 0x34FF (b) 0x3500 (c) 1 (true) x01 0xF0 0x

4 Manipulation de la mémoire Rappel: Le code ASCII Retour sommaire Bruno Permanne 2006

5 Manipulation de la mémoire Opérateurs d'accès & * Retour sommaire Bruno Permanne 2006 InstructionsAdresse Mémoire Contenu char a;0x34FE (a)? a=0x54;0x34FE0x54 char *p;0x34FE (a) 0x34FF (p) 0x3500 0x54 ? p=&a;0x34FE (a) 0x34FF (p) 0x3500 0x54 0x34 0xFE *p=0x33;0x34FE (a) 0x34FF (p) 0x3500 0x33 0x34 0xFE Déclaration d'un octet Affectation d'une valeur Déclaration d'un pointeur sur un octet Recopie de l'adresse de a dans le pointeur p Modification du contenu de la mémoire à l'adresse pointée par p

6 Manipulation de la mémoire Retour sommaire Bruno Permanne 2006 InstructionsAdresse Mémoire Contenu char a;0x34FE (a)? a=0x54;0x34FE0x54 char *p;0x34FE (a) 0x34FF (p) 0x3500 0x54 ? char b; p=0x3501; *p=234; 0x34FE (a) 0x34FF (p) 0x3500 0x3501 (b) 0x54 0x35 0x01 0xEA p--; *p=0; 0x34FE (a) 0x34FF (p) 0x3500 0x3501 (b) 0x33 0x34 0x00 0xEA Déclaration d'un octet Affectation d'une valeur Déclaration d'un pointeur sur un octet Affectation directe d'une l'adresse dans le pointeur p modification de la case mémoire pointée Modification du contenu de la mémoire à l'adresse pointée par p-1 Opérateurs d'accès & *

7 Manipulation de la mémoire Retour sommaire Bruno Permanne 2006 InstructionsAdresse Mémoire Contenu int a=0x54FE;0x34FE (a) 0x34FF 0x54 0xFE int *pa; pa=&a; 0x34FE (a) 0x34FF 0x3500 (pa) 0x3501 0x54 0xFE 0x34 0xFE *pa=0;0x34FE (a) 0x34FF 0x3500 (pa) 0x3501 0x00 0x34 0xFE int **pb; *pb=&pa; 0x3500 (pa) 0x3501 0x3502 (pb) 0x3503 0x34 0xFE 0x35 0x00 Déclaration d'un entier initialisé Déclaration d'un pointeur sur un entier et affectation à l'adresse de a Remise à zéro de l'entier pointé par pa Déclaration d'un pointeur sur un pointeur. Opérateurs d'accès & *

8 Manipulation de la mémoire Retour sommaire Bruno Permanne 2006 InstructionsAdresse Mémoire Contenu char b=4;0x34FE (a) 0x34FF (p) 0x3500 0x3501 (b) 0x33 0x34 0xFE 0x04 b=*(p+2);0x34FE (a) 0x34FF (p) 0x3500 0x3501 (b) 0x33 0x34 0xFE a=*p-3;0x34FE (a) 0x34FF (p) 0x3500 0x3501 (b) 0xFE 0x34 0xFE 0xFB Déclararation et initialisation d'un octet b la variable b reçoit la contenu de la case mémoire pointée par l'adresse stockée par la pointeur p augmentée de 2 Modification du contenu de la mémoire à l'adresse pointée par p Opérateurs d'accès & *

9 Tableaux, chaînes de caractères et pointeurs Retour sommaire Bruno Permanne 2006 InstructionsAdresse Mémoire Contenu char a[3]= {10,0x34,'0'); 0x34FE (a) 0x34FF 0x3500 0x0A 0x34 0x30 char b,*p; p=&a; b=a[2]; ou b=*(p+2); ou p+=2; b=*p; 0x34FE (a) 0x34FF 0x3500 0x3501 (b) 0x30 0x34 0x30 string s="OK"; ou char s[]="OK"; ou char s[]= {'O','K','\0'); ou char s[3]; s[0]='O'; s[1]='K'; s[2]='\0'; 0x3502 (s) 0x3503 0x3504 0x3505 0x4F ('O') 0x4B ('K') 0x00 ('\0') ? Déclaration d'un tableau d'octets initialisé Déclaration d'un octet, d'un pointeur sur a et accès aux cases du tableau Déclaration dune chaine de caractère string pour le C++ Différents styles de déclaration Ne pas oublier le caractère nul '\0' à la fin de la chaine Manipulation de la mémoire

10 Directives de compilation #include et #define Retour sommaire Bruno Permanne 2006 Préprocesseur DirectiveAction #include Inclure à cet endroit le fichier source iostream du C++ standard #include "MonEntete.h" Inclure à cet endroit un fichier que j'ai écrit et qui se trouve dans le répertoire courant du projet #define PI #define S(r) PI*r*r Définition du symbole PI et S(r) (comportant un paramètre) qui sera remplacé avant la compilation dans le programme source s1=PI*r*r; s2=S(r); s1= *r*r; s2= *r*r; Au moment de l'écriture, Après le passage du préprocesseur et avant la compilation

11 Définition des fonctions (1) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier simple.hpp #include using spacename std; void simple(void); void simple(void) { cout << "Bonjour" << endl; } Fichier des bibliothèques utilisées Prototype d'une fonction sans arguments et sans valeur de retour définition de la fonction, c'est un simple sous programme // fichier simple.cpp #include "simple.hpp" main() { simple(); } Programme principal complet avec appel de la fonction simple() Les fonctions en C++

12 Définition des fonctions (2) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier simple2.hpp #include using spacename std; void simple2(string); void simple2(string s) { cout << s << endl; } Fichier des bibliothèques utilisées Prototype d'une fonction avec un argument et sans valeur de retour définition de la fonction // fichier simple2.cpp #include "simple2.hpp" main() { simple2("Bonjour"); } Programme principal complet avec appel de la fonction simple2() Les fonctions en C++

13 Définition des fonctions (3) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier mult.hpp #include using spacename std; int mult(int, int); int mult(int a, int b) { return a*b; } Fichier des bibliothèques utilisées Prototype d'une fonction avec un argument et une valeur de retour définition de la fonction // fichier mult.cpp #include #include "mult.hpp" main() { int r=10; cout << mult(r, 3); } Programme principal complet avec appel de la fonction mult() Les fonctions en C++

14 Définition des fonctions (4) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier mult.hpp #include using spacename std; void mult(int, int, int*); void mult(int a, int b, int *s) { *s=a*b; } Fichier des bibliothèques utilisées Prototype d'une fonction avec un argument et pas de valeur de retour définition de la fonction avec passage d'un pointeur sur la variable résultat // fichier mult.cpp #include #include "mult.hpp" main() { int s, r=10; mult(r,3,&s); cout << s; } Programme principal complet avec appel de la fonction mult() Notez le passage de l'adresse de la variable résultat par &s Les fonctions en C++

15 Définition des fonctions (5) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier mult.hpp #include using spacename std; void mult(int, int, int&); void mult(int a, int b, int &s) { s=a*b; } Fichier des bibliothèques utilisées Prototype d'une fonction avec un argument et pas de valeur de retour définition de la fonction avec passage d'une référence sur la variable résultat // fichier mult.cpp #include #include "mult.hpp" main() { int s, r=10; mult(r,3,s); cout << s; } Programme principal complet avec appel de la fonction mult() Notez le passage de l'adresse de la variable résultat sans le & Les fonctions en C++

16 La portée des variables (1) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier portee.hpp #include using spacename std; int x=5: void fonc(void); void fonc(void) { cout << x; } Définition de x globale au fichier portee.hpp Affiche la valeur 5 // fichier portee.cpp #include "portee.hpp" main() { cout << x; } Affiche une erreur car la variable x est inconnue du fichier principal portee.cpp Les fonctions en C++

17 La portée des variables (1) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier portee.hpp #include using spacename std; extern int x=5: void fonc(void); void fonc(void) { cout << x; } Définition de x globale à tous les fichiers du projets Affiche la valeur 5 // fichier portee.cpp #include "portee.hpp" extern int x; main() { cout << x; } la variable extern doit être reprécisée ici (sans valeur !) Affiche la valeur 5 Les fonctions en C++

18 La portée des variables (2) Retour sommaire Bruno Permanne 2006 DirectiveAction // fichier portee.hpp #include using spacename std; int x=5: void fonc(void); void fonc(void) { int x=10; cout << x; } Définition de x globale au fichier portee.hpp Affiche la valeur 10 // fichier portee.cpp #include "portee.hpp" main() { int x=1; cout << x; } Affiche la valeur 1 Les fonctions en C++

19 Enumérations enum Retour sommaire Bruno Permanne 2006 DirectiveAction #define PRINTEMPS 0 #define ETE 1 #define AUTOMNE 2 #define HIVER 3 Utilisation du #define classique #enum {PRINTEMPS,ETE,AUTOMNE, HIVER}; L'énumération est plus élégante enum SAISON {PRINTEMPS,ETE,AUTOMNE, HIVER}; Elle peut être nommée SAISON saison_2=HIVER; Nouveau type légal en C++ en fait SAISON est un int Programmation avancée C++

20 types et structures struct Retour sommaire Bruno Permanne 2006 Programmation avancée C++ DirectiveAction struct complexe { double re; double im; }; en C++ une structure est un nouveau type, pas en C ! complexe addcomp(complexe, complexe); complexe addcomp(complexe x, complexe y) { complexe res; res.re=x.re+y.re; res.im=x.im+y.im; return res; } fonction addition de nombres complexes prototype obligatoire Le '.' permet l'accès aux membres de la structure complexe m,n,somme; somme=addcomp(m,n); Appel de la fonction

21 Programmation Fin de la deuxième partie Bruno Permanne 2006


Télécharger ppt "Programmation Initiation Aux Langages C et C++ (2) Bruno Permanne 2006."

Présentations similaires


Annonces Google