Darsliklar C++ Ko’rsatkichlar

C++ C++ Ko’rsatkichlar

Ko’rsatkichlar (pointers) — C++’ning eng kuchli va ayni paytda eng qo’rqinchli mavzusi deb hisoblanadi. Aslida esa g’oyasi oddiy: ko’rsatkich — bu boshqa o’zgaruvchining xotira manzilini saqlaydigan o’zgaruvchi. O’tgan darsda manzil bilan tanishdik; endi shu manzilni saqlab, u orqali ishlashni o’rganamiz.

Ko’rsatkich (pointer)boshqa o’zgaruvchining xotira manzilini qiymat sifatida saqlaydigan maxsus o’zgaruvchi. U * belgisi bilan e’lon qilinadi.

Ko’rsatkich e’lon qilish

Ko’rsatkich tur* nom shaklida e’lon qilinadi va unga & orqali olingan manzil beriladi:

#include <iostream>
using namespace std;

int main() {
    int yosh = 26;
    int* ptr = &yosh;   // ptr — yosh ning manzilini saqlaydi

    cout << "Qiymat: " << yosh << endl;
    cout << "Manzil: " << ptr << endl;
    return 0;
}
Qiymat: 26
Manzil: 0x7ffee1a2b3c4

int* ptr — butun songa ishora qiluvchi ko’rsatkich yaratdi, &yosh esa unga yosh ning manzilini berdi. Endi ptr yosh qayerda saqlanishini “biladi”.

Dereferensiya: * bilan qiymatga kirish

Ko’rsatkich orqali u ko’rsatayotgan qiymatga kirish uchun yana * ishlatiladi — bu dereferensiya deb ataladi:

#include <iostream>
using namespace std;

int main() {
    int yosh = 26;
    int* ptr = &yosh;

    cout << "ptr orqali qiymat: " << *ptr << endl;
    *ptr = 30;   // ko'rsatkich orqali qiymatni o'zgartiramiz
    cout << "yangi yosh: " << yosh << endl;
    return 0;
}
ptr orqali qiymat: 26
yangi yosh: 30

Diqqat qiling: *ptr = 30 orqali yosh ning o’zi o’zgardi, garchi biz unga to’g’ridan-to’g’ri tegmagan bo’lsak ham. Bu — ko’rsatkichning butun mohiyati: bilvosita, manzil orqali boshqarish.

* belgisining ikki ma’nosi

Yangi o’rganuvchini chalkashtiradigan nozik nuqta: * ikki xil vazifada ishlatiladi. Ularni jadvalda ajratamiz:

Kontekst Ma’nosi
int* ptr (e’londa) “ko’rsatkich” turini bildiradi
*ptr (kodda) ko’rsatilgan qiymatga kiradi (dereferensiya)
&yosh o’zgaruvchining manzilini oladi

Nega ko’rsatkichlar muhim?

Ko’rsatkichlar C++’ning kuchli imkoniyatlari uchun asos bo’ladi: funksiyaga katta ma’lumotni nusxalamasdan uzatish, dinamik xotira ajratish, murakkab tuzilmalar (bog’langan ro’yxatlar, daraxtlar) qurish. Ular murakkab ko’rinsa-da, mohiyatan shunchaki “manzilni saqlovchi o’zgaruvchi”.

Ehtiyot bo’ling: hech qanday manzilga ishora qilmaydigan ko’rsatkich (nullptr) ni dereferensiya qilish dasturni qulatadi. Shuning uchun ko’rsatkichni doim to’g’ri manzil bilan boshlang.

Xulosa

Bu bo’limda ko’rsatkich e’lon qilish (int*), unga manzil berish (&), dereferensiya (*ptr) bilan qiymatni o’qish va o’zgartirishni, hamda * belgisining ikki ma’nosini ko’rib chiqdik. Ko’rsatkichlar — C++ ustaligining kaliti. Keyingi darsda funksiyalar — kodni qayta ishlatishga o’tamiz.