• Aucun résultat trouvé

Granet Vincent - Vincent.Granet@univ-cotedazur.fr

N/A
N/A
Protected

Academic year: 2022

Partager "Granet Vincent - Vincent.Granet@univ-cotedazur.fr"

Copied!
14
0
0

Texte intégral

(1)

Algorithmique et Langage C

www.polytech.unice.fr/žvg/index-xidian.html

Granet Vincent - Vincent.Granet@univ-cotedazur.fr

Xi’an - Octobre 2019 - Avril 2020

1/227

(2)

Les Structures et Unions

(3)

Définition

outil de structuration des données. A l’instar des routines, qui regroupent des instructions, les structures regroupent différents objets pour leur donner une nouvelle sémantique commune.

ce sont des objets structurés qui regroupent des éléments nommés, appelés champs, de types (éventuellement) différents et accessibles par leurs noms.

son

138/227

(4)

s t r u c t date {

i n t day, month, year;

c h a r month_name[10];

};

s t r u c t date d;

s t r u c t {

/ anonymous type / d o u b l e real, imag;

} d;

s t r u c t complexe { d o u b l e real, imag;

};

t y p e d e f s t r u c t { d o u b l e real, imag;

} Complexe;

s t r u c t complexe c1;

Complexe c2, c3;

son

(5)

Initialisation

les variables de type struct peuvent être initialisées lors de leur déclaration.

initialisation de tous les champs

s t r u c t complexe { d o u b l e real, imag;

} x = { 1.4, 3.5 };

s t r u c t {

/ anonymous type /

i n t day, month, year;

c h a r month_name[10];

} d = { 2, 3, 1997, "March" } ;

initialisation partielle

s t r u c t S1 { i n t x;

s t r u c t { d o u b l e d; c h a r c; } y;

i n t z[5];

};

s t r u c t S1 x = { 1, { 10.9 } };

/

idem struct S1 x = { 1, { 10.9, '\0'}, { 0, 0, 0, 0, 0 } };

/

son

140/227

(6)

Accès

l’accès à une donnée de la structure se fait par le nom du champ avec une notation pointée.

Complexe c;

c.real = 12.5; c.imag = 0.5;

Complexe add(Complexe c1, Complexe c2) {

Complexe c = {c1.real+c2.real, c1.imag+c2.imag};

r e t u r n c;

}

s t r u c t person {

c h a r name[NAMESIZE];

l o n g i n t id_number;

s t r u c t date birthdate;

} p;

strcpy(p.name,"John");

p.birthdate.year = 1986;

son

(7)

Champs de bits

sont utilisés pour un accès à la mémoire au niveau du bit

les champs doivent être des valeurs de type

unsigned integer à l’intérieur d’un mot machine l’opérateur & ne peut être appliqué à un champ.

Attention : problème de portabilité son

142/227

(8)

segment

s page offset

31 29 23 15 0

Virtual address on XBQ−43

s t r u c t virtual_address {

u n s i g n e d offset : 16;

u n s i g n e d page : 8;

u n s i g n e d segment : 6;

u n s i g n e d : 1; / unused /

u n s i g n e d supervisor : 1;

} va;

va.supervisor = 1;

son

(9)

Polymorphisme

une même variable peut désigner des valeurs de types différents

x ← 125.75 ....

x ← "hello"

....

x ← x + 1 { valide ?????}

En C, les unions permettent un polymorphisme simplifié

son

144/227

(10)

u n i o n DoubleString { d o u b l e d;

c h a r s[MAXSIZE];

};

u n i o n DoubleString x, y;

u n i o n DoubleString {

d o u b l e d;

c h a r s[MAXSIZE];

} x, y;

t y p e d e f u n i o n { / anonymous type / d o u b l e d;

c h a r string[MAXSIZE];

} DoubleString;

DoubleString x, y;

son

(11)

Initialisation

les variables de type union peuvent être initialisées lors de leur déclaration.

seul le premier champ peut être initialisé

u n i o n DoubleString {

d o u b l e d;

c h a r s[MAXSIZE];

};

u n i o n DoubleString x = {10.76};

u n i o n DoubleString y = {"toto"}; //erreur de compilation ! ! !

son

146/227

(12)

Accès aux champs

comme pour les struct l’accès à une donnée se fait par le nom du champ avec une notation pointée.

un seul champ accessible à la fois

u n i o n { i n t i , d o u b l e d } u;

u.i = 20; //access to u.d allowed, but unde ned ...

u.d = 1.1; //access to u.i allowed, but unde ned

son

(13)

Accès aux champs

pour régler le pb précédent, on peut utiliser un sélecteur

s t r u c t person {

c h a r last_name[20], first_name[20];

s t r u c t date birthdate;

enum { f, m } sexe; //sélecteur u n i o n {

c h a r maiden_name[20];

enum { false, true } army;

} info;

} p;

p.sexe = f; strcpy(p.info.maiden_name,"Monroe");

p.sexe = m; p.info.army = false;

i f (p.sexe==f) { / femme / }

e l s e { / homme / }

son

148/227

(14)

Encombrement mémoire

la taille d’une union est égale à l’espace mémoire nécessaire à la représentation du champ le plus grand (plus alignement si nécessaire)

struct {

};

double c;

int b;

char a;

c union {

};

double c;

int b;

char a;

char = 8 bits, int = 32 bits, double = 64 bits

a b

a b c

son

Références

Documents relatifs

Mais par ailleurs on distingue aussi les formes de langage, par exemple la lettre : on voit très bien qu’il y a le roman par lettres ou la possibilité de mettre des lettres dans

Les orbitales 2p x et 2p z ne s’hybrident pas.. Tous les atomes de carbone de ces molécules sont hybridés sp 2 ; cependant, sur le plan expérimental, il a été montré

• - Connaître les circonstances de survenue et les facteurs de risques des rectites radiques.. • - Savoir

Brain imaging studies have shown that different spatial patterns of neural activation are associated with thinking about different semantic categories of pictures and words

Enfin, pour des populations de grande taille regardées sur des grandes durées de temps, on considère les limites d’échelle des processus de Galton-Watson issu d’une grande

Vincent Nolot Une utilisation de la suite de Fibonacci Dijon Leçons : 2-3-8-40-41-56.. Enoncé : On eectue une suite de lancers d'une

Directeur de la publication: Roger Guyot Rédacteur en chef: Roger Guyot Secrétaire de rédaction: Vincent Roussel Rédaction: Didier Rie - Vincent Roussei - RégisGuyot

Figure 9 shows the image of an accretion disk with rin = 6M surrounding a Schwarzschild black hole left panel, and an ultracompact star with surface radius defined by = 0.05