Pointeur de l'addition et de la taille de l'élément
: http://www.fredosaurus.com/notes-cpp/arrayptr/26arraysaspointers.html
Sous: Pointeur de l'addition et de la taille de l'élément
Il y a le code suivant:
//Assume sizeof(int) is 4.
int b[100]; //b is an array of 100 ints.
int* p; //p is a a pointer to an int.
p = b; //Assigns address of first element of b. Ie, &b[0]
p = p + 1; //Adds 4 to p (4 == 1 * sizeof(int)). Ie, &b[1]
Comment "p" dans la dernière ligne devenir "4"?
Grâce.
Notez qu'il n'est pas toujours 4. C'est juste que sur la plupart des modernes 32/64 bits des systèmes sizeof(int) est de 4. Mais sur plus exotiques les plates-formes, il pourrait être n'importe quoi, d'où "assumer sizeof(int) est de 4" commentaire.
Pas vraiment ésotérique systèmes. Je pense que Arduino processeurs ont sizeof(int) est de 2
Pas vraiment ésotérique systèmes. Je pense que Arduino processeurs ont sizeof(int) est de 2
OriginalL'auteur Simplicity | 2011-01-23
Vous devez vous connecter pour publier un commentaire.
(Je suppose que vous parlez de "1" à la dernière ligne, pas de "p")
De l'arithmétique des pointeurs en C et C++ est un logique plus, pas un numérique plus. Ajouter un à un pointeur signifie "produire un pointeur vers l'objet qui vient en mémoire juste après celle-ci", ce qui signifie que le compilateur convertit automatiquement jusqu'à ce que vous êtes à incrémenter le pointeur de par la taille de l'objet pointé. Cela vous évite d'avoir un pointeur dans le milieu d'un objet, ou un mauvais alignement de pointeur, ou les deux.
Mes excuses, je n'étais pas très claire. Le pointeur ne pas obtenir à l'échelle. Le montant que le pointeur est incrémenté par est ce qui est incrémenté. De cette façon, l'écriture
ptr + 1
signifie "la mémoire de l'adresse du pointeur, plus d'une fois de la taille des objets qu'il pointe."C'est très bien, ne vous inquiétez pas. Merci pour vos éclaircissements. Une petite chose ici, pourquoi pensez-vous que nous devons multiplier sizeof(type de données) par le numéro de l'incrément (j'.e; 1)? Est-ce juste la façon dont C++ est conçu, ou il y a une raison logique ici? Merci.
OriginalL'auteur templatetypedef
Le commentaire dans le code de votre post, il explique: ajout d'un entier x à un pointeur augmente la valeur du pointeur par x multiplié par le sizeof le type de pointe.
C'est pratique, car il n'a pas l'habitude de faire du sens pour transformer le pointeur en petits incréments, vous ne voulez pas qu'elle point dans le milieu de l'un des éléments.
OriginalL'auteur Mark Byers
car p est pointeur vers un type avec une taille de 4 octets.
+
opérateur sur les pointeurs est effectivement pointeur maj. compilateur connaît la taille de pointu type et la décale de valeur appropriéesi vous modifiez
int
àshort
, p sera décalé de 2 octetsOriginalL'auteur Andriy Tylychko