C++ için basit kısa geçeyim....
Öncelikle pointer değişkenler int değişkenlerde farksızdır. Yani int değişken ne tutar? Tamsayı!!!!
Pointer değişkenlerde tamsayı tutar. Yani int bir değişkendir aslında. Ama farkı şudur. Pointer değişkenlerin tuttuğu sayılar önemlidir. Bu sayılar belleğin hücrelerinden birini temsil eder. (Genel bellek şemasını düşün her bellek hücresi 1 bytedır ve her byte ın kullanımı için o hücrenin sayısal bir adresi vardır.)
int x=1;
int *ptr;
diyelim.
normalde x 4 byte bellekte yer kaplayan değişken olduğunu biliyoruz (32 bit bir derleyici ve işletim sisteminde)
Yani x bellekte 4 tane hücre kaplıyor.
00000000 (1. hücre Adresi:2DFFD1)
00000000 (2. hücre Adresi:2DFFD2)
00000000 (3. hücre Adresi:2DFFD3)
00000001 (4. hücre Adresi:2DFFD4)
ptr=&x;
dediğimiz zaman derleyici x'in 1. hücresinin adresini ptr değişkenine atıyor.
Yani ptr değişkenin içeriği 2DFFD1 oluyor (Sayıları sallıyorum mantık arama. 16 tabanındaki sayı sistemine göre söylüyorum.)
cout << ptr; // dediğin zaman 2DFFD1 sayısını görürsün..
cout << *ptr; // dediğin zaman ekrana x in değeri olan 1 yazdırır.
pointer değişkenlerin tek farkı *ptr gibi bir biçimde kullanıyor olmamız
*ptr=3 dediğimiz zaman derleyici şunu yapıyor...
ptr değişkenin içeriğindeki 2DFFD1 (yani x in 1. hücresi) adresinden itibaren toplam 4 byte boyunca (4 hücre boyunca) ki boyuta 3 yaz diyor. (peki neden 4 byte yani ptr sadece adres taşıyor? çünkü her pointer değişkenin hangi tip değişkeni tutacağını zaten başta belirtiyorsun. INT *ptr; dediğinde zaten int bir değişkende işlem yapacağım, 4 byte üzerinde işlem yapacağım diyorsun.)
Yani şu oluyor
00000000 (1. hücre Adresi:2DFFD1)
00000000 (2. hücre Adresi:2DFFD2)
00000000 (3. hücre Adresi:2DFFD3)
00000011 (4. hücre Adresi:2DFFD4)
Olay budur. pointer kavramını anlaman için çok örnek çözmen gerekli. pointerın pointer ı pointer referansları, void pointer hepsi ayrı bir örnektir. Hepsini denemen gerek mantığını kavraman için. Ama basit bir konudur.