Darsliklar C Xotira Manzili va Ko’rsatkichlar

C C Xotira Manzili va Ko’rsatkichlar

Xotira manzili va ko’rsatkichlar — C’ni boshqa ko’plab tillardan ajratib turadigan eng muhim mavzu. Ko’rsatkichlar C’ning kuchi va qiyinligining manbai. Ular xotira bilan bevosita ishlash, katta ma’lumotni samarali uzatish va murakkab tuzilmalar qurish imkonini beradi. Ularni tushunmasdan turib C’ni to’liq egallab bo’lmaydi.

Ko’rsatkich (pointer)boshqa o’zgaruvchining xotira manzilini saqlaydigan o’zgaruvchi. U * belgisi bilan e’lon qilinadi, & esa manzilni oladi.

Manzil olish — & operatori

Har qanday o’zgaruvchining xotiradagi manzilini & operatori beradi:

#include <stdio.h>

int main(void) {
    int yosh = 26;
    printf("Qiymati: %d\n", yosh);
    printf("Manzili: %p\n", (void*)&yosh);
    return 0;
}
Qiymati: 26
Manzili: 0x7ffee3b4c9ac

yosh — qiymatni, &yosh — u saqlanayotgan xotira manzilini beradi. Manzil o’n oltilik (hex) ko’rinishda, %p format belgisi bilan chiqadi.

Ko’rsatkich e’lon qilish

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

#include <stdio.h>

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

    printf("Manzil: %p\n", (void*)ptr);
    printf("Qiymat: %d\n", *ptr);   /* dereferensiya */
    return 0;
}
Manzil: 0x7ffee1a2b3c4
Qiymat: 26

int *ptr — butun songa ishora qiluvchi ko’rsatkich, &yosh — unga manzil berdi. *ptrdereferensiya, ya’ni ko’rsatkich ko’rsatayotgan qiymatga kirish.

* belgisining ikki ma’nosi

Yangi o’rganuvchini chalkashtiradigan nozik nuqta. Ularni jadvalda ajratamiz:

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

Ko’rsatkich orqali o’zgartirish

Ko’rsatkich orqali asl o’zgaruvchini o’zgartirish mumkin:

#include <stdio.h>

int main(void) {
    int yosh = 26;
    int *ptr = &yosh;
    *ptr = 30;   /* ko'rsatkich orqali qiymatni o'zgartiramiz */
    printf("Yangi yosh: %d\n", yosh);
    return 0;
}
Yangi yosh: 30

*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: manzil orqali bilvosita boshqarish.

Xulosa

Bu bo’limda xotira manzili (&), ko’rsatkich e’lon qilish (int *), dereferensiya (*ptr) va ko’rsatkich orqali qiymatni o’zgartirishni ko’rib chiqdik. Ko’rsatkichlar — C ustaligining kalitidir. Keyingi darsda funksiyalarga o’tamiz.