Покажчик – це адреса пам’яті, розділюваної для розміщення ідентифікатора (як ідентифікатор може виступати ім’я змінної, масиву, структури, рядкового літерала). В тому випадку, якщо змінна оголошена як покажчик, то вона містить адресу пам’яті, за якою може знаходиться скалярна величина будь-якого типу. При оголошенні змінної типу покажчик, необхідно визначити тип об’єкту даних, адресу яких міститиме змінна, і ім’я покажчика з попередньою зірочкою (або групою зірочок). Формат оголошення покажчика:

специфікатор-типу [модифікатор] \* описувач .

Специфікатор-типу задає тип об’єкту і може бути будь-якого основного типу, типу структури, суміші (про це буде сказано нижче). Задаючи замість специфікатора типу ключове слово void, можна своєрідним чином відстрочити специфікацію типу, на який посилається покажчик. Змінна, оголошувана як покажчик на тип void, може бути використана для посилання на об’єкт будь-якого типу. Проте для того, щоб можна було виконати арифметичні і логічні операції над покажчиками або над об’єктами, на які вони указують, необхідно при виконанні кожної операції явно визначити тип об’єктів. Такі визначення типів може бути виконано за допомогою операції приведення (перетворення) типів.

Як модифікатори при оголошенні покажчика можуть виступати ключові слова const, near, far, huge. Ключове слово const указує, що покажчик не може бути змінений в програмі. Розмір змінної оголошеної як покажчик, залежить від архітектури комп’ютера і від використовуваної моделі пам’яті, для якої компілюватиметься програма. Покажчики на різні типи даних не обов’язково повинні мати однакову довжину.

Для модифікації розміру покажчика можна використовувати ключові слова near, far, huge.

Приклади:

1unsigned int * a; 

Змінна а є покажчиком на тип unsigned int (цілі числа без знаку).

1double * x; 

Змінна х указує на тип даних з плаваючою точкою подвійної точності

1char * buffer; 

Оголошується покажчик з ім’ям buffer, який указує на змінну типу char

1double nomer;
2void * addres;
3addres = & nomer;
4(double *) addres ++;

Змінна addres оголошена як покажчик на об’єкт будь-якого типу. Тому їй можна присвоїти адресу будь-якого об’єкту (& - операція обчислення адреси). Проте, як було зазначено вище, жодна арифметична операція не може бути виконана над покажчиком, поки не буде явно визначений тип даних, на які він указує. Це можна зробити, використовуючи операцію приведення типу (double *) для перетворення addres до покажчика на тип double, а потім збільшення адреси.

1const * dr;

Змінна dr оголошена як покажчик на константний вираз, тобто значення покажчика може змінюватися в процесі виконання програми, а величина, на яку він указує, ні.

1unsigned char * const w = &obj.

Змінна w оголошена як константний покажчик на дані типу char unsigned. Це означає, що на протязі всієї програми w указуватиме на одну і ту ж область пам’яті. Вміст же цієї області може бути змінений.