[c++]Posez vos questions...
4 participants
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006
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
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005
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!
Re: [c++]Posez vos questions...
J'ai rien compris aux pointeurs, j'aimerai bien des explications dessus stp
minidiane- Membre
- Nombre de messages : 128
Age : 37
Localisation : Mulhouse
Profession / Etudes : Etudiante
Points : 6204
Date d'inscription : 13/06/2007
Re: [c++]Posez vos questions...
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.minidiane a écrit:J'ai rien compris aux pointeurs, j'aimerai bien des explications dessus stp
Julien- Administrateur
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005
Re: [c++]Posez vos questions...
Tu connais quelques petits trucs ou rien du tout ?payne a écrit:J'aimerais bien avoir un cour bien simple des bases du C++...
Il faut commencer par le programme Hello World !
Julien- Administrateur
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006
Re: [c++]Posez vos questions...
C'est cool, merci.le_duche a écrit:Je ferai un petit truc sur les pointeurs cet aprem
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
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006
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
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005
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- Modérateur
- Nombre de messages : 2210
Age : 39
Localisation : Louvain-la-Neuve (Belgique)
Profession / Etudes : Développeur en optimisation
Points : 8265
Date d'inscription : 16/01/2006
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
- Nombre de messages : 128
Age : 37
Localisation : Mulhouse
Profession / Etudes : Etudiante
Points : 6204
Date d'inscription : 13/06/2007
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
- Nombre de messages : 12291
Age : 37
Localisation : Clermont-Ferrand
Profession / Etudes : Ingénieur
Points : 22499
Date d'inscription : 10/03/2005
Sujets similaires
» Entretien Oral TPE: Posez vos questions les plus tordues!
» Questions, svp ...
» [Shell] Questions...
» Questions de topologie
» Questions, svp ...
» [Shell] Questions...
» Questions de topologie
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|
Jeu 2 Juil 2015 - 15:16 par louaraychi
» Devoir maison sur équilibre et réaction chimique
Dim 1 Fév 2015 - 17:19 par sararose
» Ma présentation
Sam 25 Oct 2014 - 23:29 par Rith
» projet scientique sur la LUMIERE
Ven 26 Sep 2014 - 20:33 par benjamin-010
» La trajectoire de la Terre
Mar 5 Aoû 2014 - 22:19 par Alban
» Equilibrer une réaction redox
Dim 8 Juin 2014 - 21:18 par Courtney ♥
» les effets sur les lignes de transport de l’électricité
Ven 30 Mai 2014 - 17:14 par leila14
» lignes de transport de l'électricité
Ven 30 Mai 2014 - 17:07 par leila14
» Gravitation
Ven 16 Mai 2014 - 20:16 par fatimaa
» Maquette suspension de moto 2D
Jeu 17 Avr 2014 - 17:20 par Sti2d