Все области памяти с данными приложений имеют определенные адреса. Вместо передачи данных от функции к функции обычно передают указатели, которые содержат адреса блоков с необходимыми для работы приложения данными.
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);
В примере создается указатель на целочисленную переменную, который впоследствии разыменовывается, а значение переменной показывается пользователю.