[c++]Posez vos questions...
Page 1 sur 1•
[c++]Posez vos questions...
Bon ben posez moi toutes les questions qui vous posent problème en c++ et je tenterai d'y répondre 
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
Re: [c++]Posez vos questions...
Bon allez, je commence :
Y a-t-il une différence entre variable définie et variable déclarée ?
Y a-t-il une différence entre variable définie et variable déclarée ?


Julien- Administrateur


- Messages : 6119
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [c++]Posez vos questions...
Huh...
J'aimerais bien avoir un cour bien simple des bases du C++...
À ce qu'il parraît, il va falloir connaître ce language pour pouvoir faire du map making avec Starcraft II!
J'aimerais bien avoir un cour bien simple des bases du C++...
À ce qu'il parraît, il va falloir connaître ce language pour pouvoir faire du map making avec Starcraft II!
BOO!!
Scared heh?
Scared heh?

payne- Membre


- Messages : 1552
Inscrit le : 09 Juin 2006
Age : 16
Localisation : Montréal, Québec, Canada
Profession / Etudes : Étudiant
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [c++]Posez vos questions...
J'ai rien compris aux pointeurs, j'aimerai bien des explications dessus stp

minidiane- Membre


- Messages : 90
Inscrit le : 13 Juin 2007
Age : 21
Localisation : Mulhouse
Profession / Etudes : Etudiante
Re: [c++]Posez vos questions...
minidiane a écrit:J'ai rien compris aux pointeurs, j'aimerai bien des explications dessus stp
J'ai eu cours sur les pointeurs lundi mais comme je n'y étais pas... je ne vais pas pouvoir t'expliquer ! Faudra quand-même que j'y regarde de plus près.


Julien- Administrateur


- Messages : 6119
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [c++]Posez vos questions...
payne a écrit:J'aimerais bien avoir un cour bien simple des bases du C++...
Tu connais quelques petits trucs ou rien du tout ?
Il faut commencer par le programme Hello World !


Julien- Administrateur


- Messages : 6119
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [c++]Posez vos questions...
Julien a écrit:Bon allez, je commence :
Y a-t-il une différence entre variable définie et variable déclarée ?
Qu'est-ce que tu entends par variable définie ?
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
Re: [c++]Posez vos questions...
J'ai au programme de faire un petit tuto c++ mais ca risque de prendre du temps, j'ai baucoup de choses à faire...
Je ferai un petit truc sur les pointeurs cet aprem
Je ferai un petit truc sur les pointeurs cet aprem
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
Re: [c++]Posez vos questions...
le_duche a écrit:Je ferai un petit truc sur les pointeurs cet aprem
C'est cool, merci.
Pour variable définie, justement, je ne sais pas quelle est la différence avec variable déclarée. Apparemment il y en a une, mais je ne sais pas à quel niveau.


Julien- Administrateur


- Messages : 6119
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [c++]Posez vos questions...
Bon, c'est un peu plus tard que "cet aprèm" mais c'est là.
(notez qu'on est quand même cet aprèm
)
Alors la première question c'est bien sur de savoir ce que c'est qu'un pointeur !
- C'est un truc qui pointe une variable !
- NON ! NON ! et NON !
Ca c'est la version intuitive, c'est l'idée schématique que l'on peut se faire d'un pointeur. c'est très bien pour concevoir les algorithmes, mais pour bien savoir les utiliser, il faut savoir ce que c'est.
Avant tout, il faut savoir comment fonctionne la mémoire d'une ordinateur.
Vous avez peut-être déjà entendu parler de mémoire vive, de mémoire flash, de disque dur, de barette de RAM, etc... Je ne vais pas détailler, mais sachez qu'il y a deux zones mémoire utilisées par votre ordinateur et qui ne fonctionnent pas tout à fait pareil.
La première, c'est votre disque dur. Que l'ordinateur soit allumé ou éteint, il contient un certain nombre de données qu'il trie à sa façons, auquel l'unité centrale de l'ordinateur (le processeur) peut faire des requêtes pour obtenir des informations. Particularité du disque dur, quand vous l'éteingez, il conserve ses données. Autre particularité, il est très très très lent ! (Quand un jeu se met à lagguer par exemple, ou lorsqu'un de vos programme est un peu trop envahissant et rend tout super lent; c'est que l'ordinateur a eu besoin de plus de mémoire que prévu, et est allé faire ses calculs sur le disque dur plutôt que sur la RAM (que je vais présenter après); vous voyez bien la différence de vitesse.)
La seconde zone mémoire c'est la RAM (pour Random Acces Memory, c'est à dire "Accès mémoire aléatoire"). Imaginons que vous avez une barette de RAM de 512Mo (assez classique), cela signifie que vous avez dans votre ordinateur (pas très loin du processeur) une sorte de looong ruban de 536870912 cases côte à côte numérotées de 0 à 536870911 dans chacune desquelles se trouve codé un nombre entier de 8 bits (c'est à dire codé avec 8 caractère 0-1).
La particularité de cette barette est que l'ordinateur peut avoir accès directement à n'importe laquelle de ces cases en un temps très bref, c'est à dire qu'il n'y a pas de procédé mécanique de lecture de la case comme dans le disque dur, mais un accès direct par courant électrique. C'est de là que viens le "Random Acces". Chacun des numéros associés à chacune des cases est appelé "adresse".
Une autre chose à savoir est ce qu'est une VARIABLE. Quand vous déclarez un int, un long, un float, ou plus complexe un string, ce sont des variables fictives. Que vous l'appeliez a,b,c ou JeanEdourardDeSaxCobourgGotta l'ordinateur la traitera exactement de la même façon. Ce qui compte c'est ce qui se passe en réalité.
Prenons par exemple une variable char. C'est une variable qui peut contenir 256 = 2^8 valeurs possibles. Elle a donc besoin de 8 bit pour être encodée, c'est à dire une case de la RAM (une case équivaut à un octet). Quand vous déclarez un char, l'ordinateur réserve une place d'une case dans la RAM pour votre variable, et en retient l'adresse. (vous vous retenez le nom, l'ordinateur retient l'adresse. c'est important).
Prenons un autre exemple avec une variable de type long (un entier plus grand que int). elle peut prendre exactement 4294967296 = 2^32 valeurs différentes, ce qui signifie qu'elle a besoin de 32 bits pour être encodée dans la RAM, c'est à dire 4 octets (ou 4 cases). Quand vous déclarez une variable de ce type, l'ordniateur vous trouve une petite place de 4 cases consécutives dans la RAM, et retient l'adresse de la première.
Maintenant que vous savez tout ça, qu'est-ce qu'un pointeur. Et bien c'est une variable aussi, au même titre que les int, les float ou les string, il y a les int* les long* les char* ...
Mais ce sont des variables un peu particulières, car elles contiennent deux données. D'une part elle contiennent un nombre qui est une adresse et un autre nombre qui est une longueur. Un pointeur représente donc une adresse dans la RAM et le nombre de cases qu'il faut lire à partir de cette adresse. Et avec ces données, vous pouvez retrouver n'importe quel type de variable dans la RAM.
Il est très important que réaliser qu'un pointeur EST UNE VARIABLE. C'est à dire que lorsque vous déclarer int* ptr; il y a une petite place qui ses réserve dans la RAM pour mémoriser les deux nombres que ce pointeur contient.
Oui mais si un pointeur est une variable, alors il a aussi une adresse ? et un nombre de cases à lire ? Exactement ! C'est grâce à ça qu'on peut alors utiliser des pointeur de pointeur ! Si le pointeur est une variable, il suffit de connaitre son adresse en mémoire, la longueur de cases qu'il occupe et on a un nouveau pointeur vers notre pointeur (lui même quelque part dans la mémoire et ainsi de suite...)
Comment déclarer un pointeur ?
C'est très simple. La syntaxe est la suivante:
type* nom_pointeur;
où type est le type de variable comme int, char,...
notez que type* est un type. par exemple int* est un type.
Si vous désirez donc déclarer un pointeur qui pointe vers une variable de type int* (c'est à dire déclarer un pointeur de pointeur d'entier) il suffit de déclarer int** pptr;
Conseil supplémentaire: si vous n'avez pas directement de valeur à mettre dans votre pointeur, il est fortement recommandé de l'initialiser à NULL c'est à dire
int* pointeur = NULL;
et NULL se trouve dans la librairie iostream entre autres.
Pour continuer, je préfèrerais avec des questions un peu plus précises, car il serait possible d'écrire des livres entiers sur les pointeurs !
(notez qu'on est quand même cet aprèm
Alors la première question c'est bien sur de savoir ce que c'est qu'un pointeur !
- C'est un truc qui pointe une variable !
- NON ! NON ! et NON !
Ca c'est la version intuitive, c'est l'idée schématique que l'on peut se faire d'un pointeur. c'est très bien pour concevoir les algorithmes, mais pour bien savoir les utiliser, il faut savoir ce que c'est.
Avant tout, il faut savoir comment fonctionne la mémoire d'une ordinateur.
Vous avez peut-être déjà entendu parler de mémoire vive, de mémoire flash, de disque dur, de barette de RAM, etc... Je ne vais pas détailler, mais sachez qu'il y a deux zones mémoire utilisées par votre ordinateur et qui ne fonctionnent pas tout à fait pareil.
La première, c'est votre disque dur. Que l'ordinateur soit allumé ou éteint, il contient un certain nombre de données qu'il trie à sa façons, auquel l'unité centrale de l'ordinateur (le processeur) peut faire des requêtes pour obtenir des informations. Particularité du disque dur, quand vous l'éteingez, il conserve ses données. Autre particularité, il est très très très lent ! (Quand un jeu se met à lagguer par exemple, ou lorsqu'un de vos programme est un peu trop envahissant et rend tout super lent; c'est que l'ordinateur a eu besoin de plus de mémoire que prévu, et est allé faire ses calculs sur le disque dur plutôt que sur la RAM (que je vais présenter après); vous voyez bien la différence de vitesse.)
La seconde zone mémoire c'est la RAM (pour Random Acces Memory, c'est à dire "Accès mémoire aléatoire"). Imaginons que vous avez une barette de RAM de 512Mo (assez classique), cela signifie que vous avez dans votre ordinateur (pas très loin du processeur) une sorte de looong ruban de 536870912 cases côte à côte numérotées de 0 à 536870911 dans chacune desquelles se trouve codé un nombre entier de 8 bits (c'est à dire codé avec 8 caractère 0-1).
La particularité de cette barette est que l'ordinateur peut avoir accès directement à n'importe laquelle de ces cases en un temps très bref, c'est à dire qu'il n'y a pas de procédé mécanique de lecture de la case comme dans le disque dur, mais un accès direct par courant électrique. C'est de là que viens le "Random Acces". Chacun des numéros associés à chacune des cases est appelé "adresse".
Une autre chose à savoir est ce qu'est une VARIABLE. Quand vous déclarez un int, un long, un float, ou plus complexe un string, ce sont des variables fictives. Que vous l'appeliez a,b,c ou JeanEdourardDeSaxCobourgGotta l'ordinateur la traitera exactement de la même façon. Ce qui compte c'est ce qui se passe en réalité.
Prenons par exemple une variable char. C'est une variable qui peut contenir 256 = 2^8 valeurs possibles. Elle a donc besoin de 8 bit pour être encodée, c'est à dire une case de la RAM (une case équivaut à un octet). Quand vous déclarez un char, l'ordinateur réserve une place d'une case dans la RAM pour votre variable, et en retient l'adresse. (vous vous retenez le nom, l'ordinateur retient l'adresse. c'est important).
Prenons un autre exemple avec une variable de type long (un entier plus grand que int). elle peut prendre exactement 4294967296 = 2^32 valeurs différentes, ce qui signifie qu'elle a besoin de 32 bits pour être encodée dans la RAM, c'est à dire 4 octets (ou 4 cases). Quand vous déclarez une variable de ce type, l'ordniateur vous trouve une petite place de 4 cases consécutives dans la RAM, et retient l'adresse de la première.
Maintenant que vous savez tout ça, qu'est-ce qu'un pointeur. Et bien c'est une variable aussi, au même titre que les int, les float ou les string, il y a les int* les long* les char* ...
Mais ce sont des variables un peu particulières, car elles contiennent deux données. D'une part elle contiennent un nombre qui est une adresse et un autre nombre qui est une longueur. Un pointeur représente donc une adresse dans la RAM et le nombre de cases qu'il faut lire à partir de cette adresse. Et avec ces données, vous pouvez retrouver n'importe quel type de variable dans la RAM.
Il est très important que réaliser qu'un pointeur EST UNE VARIABLE. C'est à dire que lorsque vous déclarer int* ptr; il y a une petite place qui ses réserve dans la RAM pour mémoriser les deux nombres que ce pointeur contient.
Oui mais si un pointeur est une variable, alors il a aussi une adresse ? et un nombre de cases à lire ? Exactement ! C'est grâce à ça qu'on peut alors utiliser des pointeur de pointeur ! Si le pointeur est une variable, il suffit de connaitre son adresse en mémoire, la longueur de cases qu'il occupe et on a un nouveau pointeur vers notre pointeur (lui même quelque part dans la mémoire et ainsi de suite...)
Comment déclarer un pointeur ?
C'est très simple. La syntaxe est la suivante:
type* nom_pointeur;
où type est le type de variable comme int, char,...
notez que type* est un type. par exemple int* est un type.
Si vous désirez donc déclarer un pointeur qui pointe vers une variable de type int* (c'est à dire déclarer un pointeur de pointeur d'entier) il suffit de déclarer int** pptr;
Conseil supplémentaire: si vous n'avez pas directement de valeur à mettre dans votre pointeur, il est fortement recommandé de l'initialiser à NULL c'est à dire
int* pointeur = NULL;
et NULL se trouve dans la librairie iostream entre autres.
Pour continuer, je préfèrerais avec des questions un peu plus précises, car il serait possible d'écrire des livres entiers sur les pointeurs !
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
Re: [c++]Posez vos questions...
Merci pour les explications très claires !
J'ai tout de même une question.
Il faut nécessairement l'adresse et la longueur ? Est-ce-que juste l'adresse ne suffirait-elle pas à localiser le type de variable dans la RAM ?
Aussi, est-ce qu'on peut utiliser un pointeur pour une fonction ?
J'ai tout de même une question.
le_duche a écrit:Un pointeur représente donc une adresse dans la RAM et le nombre de cases qu'il faut lire à partir de cette adresse. Et avec ces données, vous pouvez retrouver n'importe quel type de variable dans la RAM.
Il faut nécessairement l'adresse et la longueur ? Est-ce-que juste l'adresse ne suffirait-elle pas à localiser le type de variable dans la RAM ?
Aussi, est-ce qu'on peut utiliser un pointeur pour une fonction ?


Julien- Administrateur


- Messages : 6119
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)
Re: [c++]Posez vos questions...
oui oui il faut savoir de quel type il s'agit !
Quelque soit le type utilisé, ce qu'il y a dans la RAM c'est des 1 et des 0. Stocker le type en plus ferait perdre 25% de ta RAM
Quelque soit le type utilisé, ce qu'il y a dans la RAM c'est des 1 et des 0. Stocker le type en plus ferait perdre 25% de ta RAM
Duche
ERROR - No keyboard Connected. Press any key to continue...
ERROR - No keyboard Connected. Press any key to continue...

le_duche- Membre


- Messages : 820
Inscrit le : 16 Jan 2006
Age : 23
Localisation : Bruxelles
Profession / Etudes : Etudiant en Math
Feuille de personnage
Nombre de problèmes du mois résolus:


(4/7)
Re: [c++]Posez vos questions...
Merci le_duche je comprend un peu mieux à présent.
Par contre je n'ai pas très bien compris l'histoire des pointeurs de pointeurs d'ailleurs je n'avais pas compris en cours non plus l'année dernière et je devrai repasser cela au prochain semestre. J'aimerai bien des explications supplémentaires stp. Merci
Par contre je n'ai pas très bien compris l'histoire des pointeurs de pointeurs d'ailleurs je n'avais pas compris en cours non plus l'année dernière et je devrai repasser cela au prochain semestre. J'aimerai bien des explications supplémentaires stp. Merci

minidiane- Membre


- Messages : 90
Inscrit le : 13 Juin 2007
Age : 21
Localisation : Mulhouse
Profession / Etudes : Etudiante
Re: [c++]Posez vos questions...
J'ai une question par rapport aux cases mémoires : comment on peut avoir accès aux données qui y sont temporairement casées sans appeler les variables ou pointeurs ?


Julien- Administrateur


- Messages : 6119
Inscrit le : 10 Mar 2005
Age : 21
Localisation : Bourges
Profession / Etudes : Elève ingénieur
Feuille de personnage
Nombre de problèmes du mois résolus:


(0/0)














