Latest web development tutorials

C Pointer-Arithmetik

C Pointer C Pointer

C Zeiger ist die Adresse einer numerischen Darstellung. Daher können Sie arithmetische Operationen mit Zeigern durchführen. Pointer kann vier Rechenoperation sein: +, -, +, -.

Angenommenptr ist ein Zeiger auf einen Integer - Zeiger - Adresse 1000, ist ein 32-Bit - Integer, lassen Sie die Zeigerarithmetik folgendes auszuführen:

ptr++

Nach der obigen Operation durchgeführt wird , zeigtptr 1004 zu positionieren, weil ptr jede zusätzliche Zeit wird es auf die nächste ganze Zahl Position hin , dass die aktuelle Position vier Bytes zurück bewegt.In dem Fall dieser Vorgang nicht den tatsächlichen Wert des Speicherplatzes beeinflussen, um den Zeiger auf die nächste Speicherstelle zu bewegen. Wennptr zeigt auf eine Adresse von 1000 Zeichen, bewirkt der obige Vorgang einen Zeiger zu der Position 1001, da die Position nächste Zeichen in 1001.

Inkrementieren eines Zeigers

Wir möchten einen Zeiger anstelle eines Arrays in dem Programm zu verwenden, da die Variable Zeiger inkrementiert wird, und das Array kann nicht erhöht, da das Array ein konstanter Zeiger ist. Das folgende Programm erhöht den variablen Zeigerzugriff jedes Element in der Anordnung, um sequentiell:

#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;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

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

Erniedrigen einen Zeiger

In ähnlicher Weise wird der Zeiger dekrementiert und die Anzahl der Bytes, die Subtraktion der Wert seiner Datentyp ist, wie folgt:

#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;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

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

Vergleichen Zeiger

Pointer kann die Beziehung zwischen den Betreibern, wie ==, <und> zu vergleichen verwendet werden. Wenn p1 und p2 Punkte auf zwei verbundenen Variablen, wie mit einer Reihe von verschiedenen Elementen, kann es die Größe p1 und p2 verglichen.

Das folgende Verfahren modifiziert das obige Beispiel, solange die Adresse des letzten Elements eines variablen Zeiger ist die Adresse des Arrays kleiner oder gleich zu & var [MAX - 1], stellen die Zeigervariable inkrementiert:

#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;
}

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

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