[C++] Pointeurs est références

Discussion dans 'Web, design' créé par Carambar, 16 Juillet 2009.

  1. Offline
    Carambar He once forgot how to cry
    Salut,

    Je m'emmêle toujours les pinceaux quand il s'agit de travailler avec ces notions. Si j'ai bien compris:

    * : pointeur vers adresse
    & : référence

    Mais que signifie:

    ** (pointeur sur un pointeur ?)

    Et comment fait-on pour chercher le pointeur d'un élément dans un tableau ?
    Carambar, 16 Juillet 2009
    #1
  2. Offline
    null ose();
    * -> tu demandes ce qu'il y a à l'adresse vers laquelle pointe le pointeur
    & -> te donne l'adresse de l'objet

    ** -> tu as un pointeur qui pointe sur un autre pointeur qui pointe sur un emplacement mémoire où il y a un "int" par exemple, ça va te donner la valeur du int.
    null, 16 Juillet 2009
    #2
  3. Offline
    Carambar He once forgot how to cry
    Ok, donc pour reformuler:

    * : c'est pour avoir le contenu d'une information qui se trouve à une adresse donnée.
    & : c'est pour avoir l'adresse à proprement parler.

    Donc on pourrait combiner les deux ? Il faudrait que je retrouve la manière dont on intialise un pointeur...

    Quant au double pointeur, ca ressemble à cela en mémoire ?

    * -> [*] -> [int]
    Carambar, 16 Juillet 2009
    #3
  4. Offline
    null ose();
    Oui bien sûr ! Image que tu ais un tableau d'objets "MonObjet". Le tableau étant un pointeur vers des objets statiques. Si tu veux avoir l'adresse à laquelle se trouve l'objet placé à la troisième position (indice 2), tu dois accéder à l'objet par le tableau (donc via le pointeur) et puis demander l'adresse de l'objet :

    Pour le double pointeur, imagine un tableau contenant des pointeurs d'objets. Tu dois donc utiliser un double pointeur :

    A noter que l'écriture avec les [] est équivalent à "pTableau+1" par exemple.
    null, 21 Juillet 2009
    #4
  5. Offline
    ailless Asimov, Sagan, Carlin, Hitchens
    Le caractère '&' peut-être utilisé dans 2 situations.

    1) Dans le cas d'un passage d'adresse à une fonction (méthode classique en C)
    2) en C++, on donne l'adresse d'un attribut sans devoir le préciser lors de l'appel de la fonction, c'est ce qu'on appelle passage par référence.

    Pour ta question sur **, essaye de comprendre avec les arguments du main.

    Le main peut avoir 3 formes :

    int main(void) : le programme ne peut recevoir aucun paramètre
    int main(int argc, char **argv) ou encore int main(int argc, char *argv[]) : le programme peut recevoir des paramètres

    Et une dernière qui prend l'environnement en plus.

    Dans la deuxième manière, argc correspond au nombre d'argument passé au programme alors que le deuxième (argv) est un tableau de chaine de caractères comportant les paramèrtes.

    Si tu n'avais que char *argv, cela aurait correspondu à un simple tableau d'objet ou de types basiques mais pas de chaines de caractères.

    C'est assez difficile à expliquer donc désolé mais bon quand t'avanceras, tu comprendras peut-être mieux le principe.



    J'ai fait ce petit code d'exemple afin que tu vois bien la différence entre les 2 '&' ainsi qu'un petit exemple pour les paramètres récupérés avec le lancement du programme.

    argv[0] est toujours égal au nom du programme.

    Ce code nous donne :

    Tu peux toujours aller voir ici : http://www.siteduzero.com/tutoriel-3-11141-nouveautes-pour-les-variables.html#ss_part_5

    cela te montre les différences entre pointeurs/référence
    ailless, 23 Juillet 2009
    #5