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
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).
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
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.
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)
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.
En recherche d'emploi.