Latest web development tutorials

C pointeur arithmétique

C Pointer C Pointer

C pointeur est l'adresse d'une représentation numérique. Par conséquent, vous pouvez effectuer des opérations arithmétiques sur les pointeurs. Pointer peut être opération de quatre arithmétique: +, -, +, -.

ptr Supposons est un pointeur vers une adresse entier de pointeur 1000, est un entier de 32 bits, que l'arithmétique de pointeur pour effectuer les opérations suivantes:

ptr++

Après avoir effectué l'opération ci - dessus, les pointsptr pour positionner 1004, parce ptr chaque fois plus il pointera vers la position suivante entier que la position actuelle est retourné quatre octets.Dans le cas de cette opération ne sera pas affecter la valeur réelle de l'emplacement de mémoire, placez le pointeur sur l'emplacement de mémoire suivant. Siptr pointe vers une adresse de 1000 caractères, l'opération ci - dessus provoque un pointeur vers la position de 1001, parce que la position suivante en 1001.

Incrémenter un pointeur

Nous aimons utiliser un pointeur au lieu d'un tableau dans le programme, parce que le pointeur variable est incrémenté, et le réseau ne peut pas augmenter, car le tableau est un pointeur constant. Le programme suivant incrémente le pointeur variable pour accéder séquentiellement chaque élément dans le tableau:

#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中的数组地址 */
   ptr = var;
   for ( i = 0; i < MAX; i++)
   {

      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );

      /* 移动到下一个位置 */
      ptr++;
   }
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Address of var[0] = bf882b30
Value of var[0] = 10
Address of var[1] = bf882b34
Value of var[1] = 100
Address of var[2] = bf882b38
Value of var[2] = 200

Décrémente un pointeur

De même, le pointeur est décrémenté et en soustrayant le nombre d'octets qui est la valeur de son type de données, comme suit:

#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中最后一个元素的地址 */
   ptr = &var[MAX-1];
   for ( i = MAX; i > 0; i--)
   {

      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );

      /* 移动到下一个位置 */
      ptr--;
   }
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Address of var[3] = bfedbcd8
Value of var[3] = 200
Address of var[2] = bfedbcd4
Value of var[2] = 100
Address of var[1] = bfedbcd0
Value of var[1] = 10

Comparer pointeur

Pointer peut être utilisé pour comparer la relation entre les opérateurs, tels que ==, <et>. Si p1 et points de p2 à deux variables connexes, comme avec un éventail de différents éléments, il peut être la taille de p1 et p2 comparés.

La procédure suivante modifie l'exemple ci-dessus, tant que l'adresse du dernier élément d'un pointeur variable est l'adresse du réseau est inférieure ou égale à & var [MAX - 1], mettez la variable de pointeur est incrémenté:

#include <stdio.h>

const int MAX = 3;

int main ()
{
   int  var[] = {10, 100, 200};
   int  i, *ptr;

   /* 指针中第一个元素的地址 */
   ptr = var;
   i = 0;
   while ( ptr <= &var[MAX - 1] )
   {

      printf("Address of var[%d] = %x\n", i, ptr );
      printf("Value of var[%d] = %d\n", i, *ptr );

      /* 指向上一个位置 */
      ptr++;
      i++;
   }
   return 0;
}

Lorsque le code ci-dessus est compilé et exécuté, il produit les résultats suivants:

Address of var[0] = bfdbcb20
Value of var[0] = 10
Address of var[1] = bfdbcb24
Value of var[1] = 100
Address of var[2] = bfdbcb28
Value of var[2] = 200

C Pointer C Pointer