Bonjour tout le monde,
pourriez vous me dire les qualificatifs pour les variables suivantes:
merciCode:
1
2
3 double *const varF=&varC; double const* varG=varB; (var B valant 100 par exemple) double const*const varH= varD;
Version imprimable
Bonjour tout le monde,
pourriez vous me dire les qualificatifs pour les variables suivantes:
merciCode:
1
2
3 double *const varF=&varC; double const* varG=varB; (var B valant 100 par exemple) double const*const varH= varD;
Bonjour,
une recherche sur const dans la FAQ donne de bons résultats.
http://cpp.developpez.com/faq/cpp/?p...har_const_char
Bonjour,
La règle est "const s'applique à gauche. à défaut, il s'applique à droite".
Donne nous ta réponse, nous te dirons si elle est bonne.
Dit autrement, un const à gauche de l'étoile s'applique à l'objet pointé, tandis qu'à droite il s'applique au pointeur.
Voila mes éléments de réponse à mon problème
varF est un pointeur constant sur un double.La valeur sur laquelle il pointe peut etre modifiée, mais VarF est constant est ne peut donc pas pointer sur un autre emplacement que l'adresse de varC.Code:double *const varF = &varC;
VarG est un pointeur sur un double constant. La valeur sur laquelle il pointe ne peut pas être modifiée, en l'occurence varB.Code:double const* varG = varB;
VarH est un pointeur constant sur un double constant.Code:double const*const var H= varD
La valeur sur laquelle il pointe ne peut pas être modifiée et il ne peut pas pointer sur un autre emplacment.
C'est bien ca.
Par contre, il y a probleme avec ton énoncé, a propos de ce qui est mis dans les pointeurs.
Un pointeur est une variable dont les valeurs sont des adresses en mémoire.
- Dans double *const varF=&varC; varF contient l'adresse de varC.
- Dans double const* varG=varB; //(var B valant 100 par exemple) varG contient la valeur de varB. il faut espérer que varB est du type double *, à deux const près.
- [codeinline]double const*const varH= varD;[codeinline] même considération, varD doit être un double*.
le const du pointeur lui même se comporte exactement avec des variables non pointeurs.
Code:
1
2
3
4
5 int a=0; int const b =a;//est valide int c = b;//est aussi valide c = a;//est valide b = a; //n'est pas valide
Par contre, un pointeur ne peut recevoir que des adresses pas plus constantes:Code:
1
2
3
4
5
6 int entier; int * a=&entier; int * const b =a;//est valide int * c = b;//est aussi valide c = a;//est valide b = a; //n'est pas valide
le jeu devient beaucoup plus prise de tête avec un pointeur de fonction prenant en argument un pointeur de fonction int vers int et un tableau de pointeur de…Code:
1
2
3
4
5
6
7 int entier; int const constante; int * a1 = &entier;//est valide int * a2 = &constante;//n'est pas valide int const * b1 = &entier;//est valide int const * b2 = &constante;//est valide
typedef deviendra ton ami.
Pour l'exercice essaie de lire ceci:
int push(int (*)(int), int (*[])(int), int);Voici un exemple d'usage:
Je n'arrive même pas à écrire la signature de get, qui prendrait en argument le tableau, un int et retournerait l'élément correspondantCode:
1
2
3
4
5
6
7
8
9
10
11
12 #include <stdio.h> int doubler(int n){return 2*n;} int ajouter(int (*)(int), int (*[])(int), int); int main(){ int (*tab[12])(int)={NULL}; if(!ajouter(double, tab, 12)) return 1; int (*f)(int) = tab[0]; printf("%d",(*f)(4)); return 0; }
avec des typedefs, ca donnerait:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include <stdio.h> typedef int (*pfi_i)(int); int doubler(int n){return 2*n;} int ajouter(pfi_i, pfi_i[], int); pfi_i obtenir(pfi_i[], int max, int i); int main(){ pfi_i tab[12]={NULL}; int i = ajouter(double, tab, 12) if(i==-1) return 1; pfi_i f = obtenir(tab, 12, i); printf("%d",(*f)(4)); return 0; }