C: Указатели

Все области памяти с данными приложений имеют определенные адреса. Вместо передачи данных от функции к функции обычно передают указатели, которые содержат адреса блоков с необходимыми для работы приложения данными.

int *pi = &value;

Символ звездочки указывает на то, что созданная переменная является указателем на данные заданного типа (в данном случае на целое число).

Также разрешается устанавливать значения указателей после инициализации.

int *pi = NULL;
pi = &value;

Для того, чтобы получить доступ к данным, на которые указывает указатель, следует разыменовать его, использовав символ звездочки перед именем переменной.

int *pi = &value;
int rpi = *pi;

Хорошим тоном является использование значения NULL (несуществующего указателя) в качестве значения указателя, который не инициализируется другим значением. Вообще, значение NULL широко используется для отметки некорректных указателей, то есть, указателей, которые в текущий момент не ссылаются на какие-либо актуальные данные.

Для проверки корректности указателя (то есть, сравнения его значения с NULL) может использоваться условная инструкция.

if (ptr)
if (!ptr)

С помощью первой инструкции можно исполнить блок кода в том случае, если значение указателя не равно NULL. Во втором случае блок кода исполнится лишь в том случае, если значение указателя равно NULL.

Функции

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

void outputAge(unsigned int *age)
{

}

outputAge(&age);

Пример

В примере создается указатель на целочисленную переменную, который впоследствии разыменовывается, а значение переменной показывается пользователю.

  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.     int x = 5;
  6.     int *y = &x;
  7.  
  8.     printf("%in", *y);
  9.  
  10.     return 0;
  11. }

Загрузить исходный код примера