Partage
  • Partager sur Facebook
  • Partager sur Twitter

boucle for avec un pointeur

    1 décembre 2020 à 15:22:19

    Svp aider moi a comprendre cette instruction,sachant que t est le nom du tableau qui est un pointeur constant sur la première case du tableau , n est la taille du tableau

    que signifie   (t+n) ? 

     for(p=t;p<t+n;p++)

    -
    Edité par BenamriEmna2 1 décembre 2020 à 15:23:53

    • Partager sur Facebook
    • Partager sur Twitter
      1 décembre 2020 à 15:41:01

      t contient l'adresse du premier du tableau. *t est synonyme de t[0]

      t+1 contient l'adresse de l'élément suivant. *(t+1) est synonyme de t[1]

      t+2 contient l'adresse de l'élément d'après. *(t+2) est synonyme de t[2]

      Et t+n contient l'adresse de l'élément situé n cases plus loin. *(t+n) est donc synonyme de t[n], qui n'existe pas (le tableau s'arrête à t[n-1]).

      La boucle signifie donc que le pointeur pointe d'abord sur la première case du tableau (p=t) puis on se décale de case en case tant que le pointeur n'est pas sorti du tableau (tant que p<t+n).

      • Partager sur Facebook
      • Partager sur Twitter
        6 décembre 2020 à 13:09:20

        En principe, faut pas le faire. Undefined behaviour.

        Exemple : mémoire (micro processeur) de 64K, adresses sur 16 bits.  Un tableau de 4K octets, qui commence à l'adresse 60K.  adresse de debut + taille = 0.

        -
        Edité par michelbillaud 6 décembre 2020 à 13:10:12

        • Partager sur Facebook
        • Partager sur Twitter
          6 décembre 2020 à 14:31:41

          michelbillaud a écrit:

          En principe, faut pas le faire. Undefined behaviour.

          Exemple : mémoire (micro processeur) de 64K, adresses sur 16 bits.  Un tableau de 4K octets, qui commence à l'adresse 60K.  adresse de debut + taille = 0.

          C'est un risque que l'on peut contourner en écrivant à la place
          for ( p = t ; p <= t + (n-1) ; p++ )

          Mais on a alors le problème inverse si le tableau débute à l'adresse 0 dans le cas où sa taille est nulle, cas encore moins probable mais restant possible ;-)

          On peut y préférer la notation tableau, celle que je préfère bien qu'elle soit plus verbeuse.

          for ( p = &t[0] ; p <= &t[n-1] ; ++p )



          • Partager sur Facebook
          • Partager sur Twitter

          En recherche d'emploi.

            6 décembre 2020 à 21:16:33

            michelbillaud a écrit:

            En principe, faut pas le faire. Undefined behaviour.

            Exemple : mémoire (micro processeur) de 64K, adresses sur 16 bits.  Un tableau de 4K octets, qui commence à l'adresse 60K.  adresse de debut + taille = 0.

            -
            Edité par michelbillaud il y a environ 7 heures


            Ce n'est un UB uniquement dans ce cas ; sinon utiliser l'adresse «du suivant» le dernier d'un tableau est autorisé tant qu'on ne déréférence pas (C11 6.5.6 8 & 9)
            • Partager sur Facebook
            • Partager sur Twitter

            boucle for avec un pointeur

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown