Latest web development tutorials
×

C курс

C Язык учебника C Краткое введение C параметры окружающей среды C Структура программы C Базовый синтаксис C Типы данных C переменная C постоянная C Storage Class C операторы C судья C циркуляция C функция C Обзорное правила C массив C указатель C строка C структура C союз C поле Bit C typedef C Входной и Выходной C грамотность документов C препроцессор C заголовок C Слепки C Обработка ошибок C Рекурсия C Переменный параметр C Управление памятью C Параметры командной строки C Классические 100 случаев

C Стандартная библиотека

C Стандартная библиотека - справочное руководство C Стандартная библиотека - <assert.h> C Стандартная библиотека - <ctype.h> C Стандартная библиотека - <errno.h> C Стандартная библиотека - <float.h> C Стандартная библиотека - <limits.h> C Стандартная библиотека - <locale.h> C Стандартная библиотека - <math.h> C Стандартная библиотека - <setjmp.h> C Стандартная библиотека - <signal.h> C Стандартная библиотека - <stdarg.h> C Стандартная библиотека - <stddef.h> C Стандартная библиотека - <stdio.h> C Стандартная библиотека - <stdlib.h> C Стандартная библиотека - <string.h> C Стандартная библиотека - <time.h>

C арифметические операции над указателями

C Указатель C Указатель

Указатель C представляет собой адрес численного представления. Таким образом, вы можете выполнять арифметические операции над указателями. Указатель может быть четыре арифметические операции: +, -, +, -.

ПустьPTR является указателем на адрес 1000 целочисленный указатель, представляет собой 32-битное целое число, пусть арифметические операции над указателями для выполнения следующих действий :

ptr++

После выполнения вышеуказанной операции,PTR указывает на позицию 1004, так как PTR каждого дополнительного времени он будет указывать на следующую позицию целого , что текущая позиция перемещается назад четыре байта.В случае этой операции не повлияет на фактическое значение ячейки памяти, переместите указатель на следующую ячейку памяти. ЕслиPTR указывает на адрес 1000 знаков, вышеуказанная операция приведет указатель на позицию 1001, так как следующий символ в 1001 году .

Увеличивая указатель

Мы хотели бы использовать указатель вместо массива в программе, так как переменная указатель увеличивается на единицу, а массив не может увеличиваться, так как массив является постоянным указателем. Следующая программа увеличивает переменную указатель для последовательного доступа к каждому элементу в массиве:

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

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

Декремент указатель

Точно так же, указатель уменьшается на единицу и вычитают количество байтов, которое является значением типа данных, следующим образом:

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

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

Сравнить указатель

Указатель может быть использован для сравнения отношения между операторами, такими как ==, <и>. Если p1 и p2 точки на двух связанных переменных, таких как с массивом различных элементов, она может быть размером с p1 и p2 по сравнению.

Следующая процедура изменяет приведенный выше пример, до тех пор, как адрес последнего элемента переменной указателя является адрес массива меньше или равно & вар [MAX - 1], поместите переменную указатель увеличивается на единицу:

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

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

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 Указатель C Указатель