Latest web development tutorials

C wskaźnik arytmetyczna

C Pointer C Pointer

C wskaźnik jest adres reprezentacji liczbowej. W związku z tym, można wykonywać operacje arytmetyczne na wskaźniki. Wskaźnik może być cztery operacja arytmetyczna: +, -, +, -.

Załóżmyptr jest wskaźnikiem do adresu wskaźnika całkowita 1000, jest 32-bitową liczbą całkowitą, niech arytmetyczna wskaźnika, aby wykonać następujące czynności:

ptr++

Po wykonaniu powyższej operacjiptr punkty do pozycji 1004, ponieważ PTR każdy dodatkowy czas będzie to wskazywać na następnej pozycji liczby całkowitej, że aktualna sytuacja wróciła cztery bajty.W przypadku tej operacji nie będzie miało wpływu na wartość rzeczywistą lokalizację pamięci, przesuń kursor do następnego miejsca w pamięci. Jeśliptr punkty do adresu 1000 znaków, powyższa operacja spowoduje wskaźnik do pozycji 1001, ponieważ następnej pozycji znaku w 1001.

Zwiększanie wskaźnika

Chcemy użyć wskaźnika zamiast tablicy w programie, ponieważ zmienna wskaźnik jest zwiększany, a tablica nie może wzrosnąć, ponieważ tablica jest stałym wskaźnikiem. Poniższy program zwiększa zmienny wskaźnik do sekwencyjnego dostępu do każdego elementu w tablicy:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

Zmniejszamy wskaźnik

Podobnie, wskaźnik jest zmniejszona odjęcie liczby bajtów, które ma wartość typu danych w następujący sposób:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

Porównaj wskaźnik

Wskaźnik może być zastosowany do porównania związek między operatorami, takich jak == <i>. Jeśli punkty P1 i P2 do dwóch powiązanych zmiennych, takich jak z szerokim wachlarzem różnych elementów, może być wielkość P1 i P2 w porównaniu.

Następująca procedura modyfikuje powyższym przykładzie, tak długo jak adres ostatniego elementu o zmiennej wskaźnika jest adres tablicy jest mniejsza niż lub równa & var [max - 1], umieścić zmienną wskaźnika zwiększa się:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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