Ümumi Baxış
Pointer Nədir?
0x7fff5fbff8a4
). Pointer isə bu ünvanı “göstərir” və bizə dəyişənin dəyərinə birbaşa və ya dolayısı ilə daxil olmaq imkanı verir.
Məsələn, C dilində bir pointer belə təyin olunur:
int x = 10;
int *ptr = &x;
x
bir tam ədəddir və yaddaşda bir ünvanda saxlanılır.&x
operatorux
-in yaddaş ünvanını alır.*ptr
isə bu ünvanı saxlayan pointer-dır.
Pointer-lar Necə İşləyir?
#include <stdio.h>
int main() {
int x = 10;
int *ptr = &x;
printf("x-in dəyəri: %d\n", x);
printf("x-in ünvanı: %p\n", &x);
printf("ptr-dəki ünvan: %p\n", ptr);
printf("ptr-in göstərdiyi dəyər: %d\n", *ptr);
return 0;
}
x-in dəyəri: 10
x-in ünvanı: 0x7fff5fbff8a4
(təxmini ünvan)ptr-dəki ünvan: 0x7fff5fbff8a4
ptr-in göstərdiyi dəyər: 10
*ptr
yazaraq pointer-in göstərdiyi ünvandakı dəyərə (yəni x
-in dəyərinə) çatıb 10
alırık. Bu prosesə dereferencing (ünvana müraciət) deyilir.
Əsas Xüsusiyyətlər
- & Operatoru: Dəyişənin ünvanını alır (məsələn,
&x
). - *** Operatoru**: Pointer-in göstərdiyi ünvandakı dəyəri qaytarır (məsələn,
*ptr
). - Dinamik Yaddaş: Pointer-lar
malloc
vəfree
kimi funksiyalarla yaddaşı idarə edir. - Strukturlarla İş: Pointer-lar mürəkkəb data strukturlarını (məsələn, linked list) bağlayır.
Pointer-lar Niyə Lazımdır?
- Dəyəri Funksiyada Dəyişmək Pointer ilə ünvanı göndərərək orijinal dəyəri dəyişə bilirik:
void changeValue(int *p) {
*p = 20;
}
int main() {
int x = 10;
changeValue(&x);
printf("Yeni dəyər: %d\n", x);
return 0;
}
- Dinamik Yaddaş İdarəetməsi Böyük proqramlarda yaddaş ayırmaq üçün:
int *arr = (int*)malloc(5 * sizeof(int));
arr[0] = 1;
arr[1] = 2;
free(arr);
- Mürəkkəb Data Strukturları Linked list kimi strukturlarda:
struct Node {
int data;
struct Node *next;
};
İstifadə Edilən Texnologiyalar
- C: Pointer-ların ən çox istifadə olunduğu dil.
- C++: Pointer-lar və referencelər (
&
) ilə genişləndirilib. - Rust: Təhlükəsiz “smart pointer” təklif edir.
Çətinliklər və Öyrənilənlər
- Null Pointer: Pointer
NULL
olarsa və*ptr
edilərsə, proqram çökə bilər. - Dangling Pointer: Yaddaş azad edilibsə, amma pointer hələ də ora işarə edirsə, problem yarana bilər.
- Yaddaş Sızması:
free
unudulduqda yaddaş boşa xərclənir.