برای استفاده از اشارهگر در برنامه، ابتدا باید اشارهگر تعریف شود. روش کلی تعریف متغیری از نوع اشارهگر به صورت زیر است.
data-type * ptvar ;
که در آن ptvar نام متغیر مورد نظر و data-type نوع متغیری است که آدرس آن در متغیر اشارهگر ptvar قرار میگیرد. نماد `*´ نیز اپراتور اشارهگر است.
متغیرهای اشارهگر ممکن است به متغیرهای عددی، کاراکتری، آرایهها، توابع، ساختارها یا دیگر متغیرهای اشارهگر اشاره کند. در حالت کلی هر نوع داده ذخیره شده در حافظه کامپیوتر یک یا چند بایت متوالی از خانههای حافظه را اشغال میکند. در صورتی میتوان به داده دسترسی داشت که آدرس اولین خانه یا اولین بایت آن را در حافظه بدانیم. آدرس محل متغیر a در حافظه با عبارت &a تعیین میگردد که در آن & اپراتور یکانی یا تکاپراندی است و اپراتور آدرس نامیده میشود و آدرس اپراند یا عملوند خود را به دست میدهد. حال فرض کنید که متغیر a از نوع int و متغیر pa نیز متغیر اشارهگر باشد و به صورت زیر توصیف کرده باشیم.
int *pa ;
در این صورت با دستور جایگذاری pa = &a ; آدرس متغیر a به اشارهگر pa نسبت داده میشود. pa را اشارهگر a مینامند، زیرا به محلی از حافظه اشاره میکند که مقدار متغیر a در آن ذخیره شده است. به هرحال بهخاطر بسپارید که pa مقدار a را معرفی نمیکند، بلکه آدرس a را معرفی میکند و به همین لحاظ آن را متغیر اشارهگر نامند. شکل ۸ـ۱ رابطه بین pa و a را نشان میدهد.
دادهای که با a معرفی میگردد (یعنی دادهای که در خانه a از حافظه ذخیره شده است) با عبارت *pa در دسترس قرار میگیرد که در آن * اپراتور یکانی یا تکاپراندی است که فقط روی متغیرهایی از نوع اشارهگر عمل میکند. بنابراین a و *pa هر دو همان قلم داده (یعنی هر دو محتوای خانههای یکسان از حافظه) را معرفی میکنند. پس با اجرای دو دستور
pa = &a ;
k = *pa ;
k و a هر دو یک مقدار را معرفی خواهند کرد؛ یعنی مقدار a به طور غیرمستقیم به k نسبت داده خواهد شد. به عبارت دیگر، نتیجه دو دستور مزبور مشابه نتیجه دستور k = aاست.
بنابراین عملگر * در مورد *pa محتوای محلی را برمیگرداند که آدرس آن در pa قرار دارد و به همین لحاظ به آن عملگر غیرمستقیم نیز گویند.