C funksiya ko‘rsatkichlari


ULASHISH

Funksiya ko‘rsatkichi

Funksiya ko‘rsatkichi oddiy ko‘rsatkichga o‘xshaydi, lekin u o‘zgaruvchiga emas, funksiyaga ishora qiladi.

Ya’ni u funksiyaning manzilini saqlaydi va bu o‘sha funksiyani ko‘rsatkich orqali chaqirish imkonini beradi.

Funksiya ko‘rsatkichlari dastur ishlayotgan paytda qaysi funksiyani bajarishni hal qilish imkonini beradi, shuningdek funksiyani boshqa funksiyaga argument sifatida uzatmoqchi bo‘lganingizda ham qo‘l keladi.

Buni telefon raqamini saqlab qo‘yishga o‘xshatish mumkin — ko‘rsatkich funksiya xotiraning qayerida joylashganini biladi, shuning uchun uni keyinroq "chaqirish" mumkin.


Funksiya ko‘rsatkichini e’lon qilish

Funksiya ko‘rsatkichini e’lon qilishning umumiy sintaksisi:

returnType (*pointerName)(parameterType1, parameterType2, ...);

Masalan:

int (*ptr)(int, int);

Bu ptr ikkita int qiymat qabul qilib, int qaytaradigan funksiyaga ko‘rsatkich ekanini bildiradi.


Funksiyani ko‘rsatkichga o‘zlashtirish

Funksiyani ko‘rsatkichga ikki usulda o‘zlashtirish mumkin:

ptr = add; ptr = &add;

Ikkalasi ham bir xil, chunki funksiya nomi allaqachon uning xotiradagi manzilini ifodalaydi.


Funksiyani ko‘rsatkich orqali chaqirish

Ko‘rsatkichga qiymat o‘zlashtirilgach, funksiyani ikki usulda chaqirish mumkin:

ptr(5, 3); (*ptr)(5, 3);

Ikkalasi ham to‘g‘ri va bir xil vazifani bajaradi.



Funksiya ko‘rsatkichi misoli

Endi funksiya ko‘rsatkichini qanday e’lon qilish va unga qiymat o‘zlashtirishni bilganingizdan so‘ng, to‘liq misolni ko‘rib chiqaylik:

Misol

Ikki sonni qo‘shadigan funksiyaga ko‘rsatkich:

int add(int a, int b) {   return a + b; } int main() {   int (*ptr)(int, int) = add;   int result = ptr(5, 3);   printf("Result: %d", result);   return 0; }

O‘zingiz sinab ko‘ring »

Bu yerda:

  • ptr — add() funksiyasiga ko‘rsatkich.
  • ptr(5, 3) funksiyani ko‘rsatkich orqali chaqiradi.

Bu xuddi add(5, 3) chaqiruvi kabi ishlaydi.

Eslatma: Funksiya nomining o‘zi xotiradagi kodining boshiga ishora qiladi. Demak, funksiya nomi allaqachon ko‘rsatkich kabi ishlaydi! Funksiya ko‘rsatkichini e’lon qilish sizga shunchaki shu manzilni saqlay oladigan o‘zgaruvchi beradi — shu tariqa uni o‘zgartirishingiz yoki boshqa joylarga uzatishingiz mumkin.


Funksiyani argument sifatida uzatish

Funksiya ko‘rsatkichlarini boshqa funksiyalarga uzatish mumkin — bu callback deb ataladi.

Bu funksiyaga siz kirish sifatida bergan boshqa funksiyani chaqirish imkonini beradi.

Misol

Funksiya ko‘rsatkichini boshqa funksiyaga uzatish:

void greetMorning() { printf("Good morning!\n"); } void greetEvening() { printf("Good evening!\n"); } void greet(void (*func)()) {   func(); } int main() {   greet(greetMorning);   greet(greetEvening);   return 0; }

O‘zingiz sinab ko‘ring »

Bu yerda greet() boshqa funksiyani parametr sifatida qabul qiladi va uni chaqiradi. Bu hodisalarga asoslangan (event-driven) dasturlarda yoki foydalanuvchi taqdim etadigan callback funksiyalarini talab qiluvchi kutubxonalarda keng qo‘llaniladi.


Funksiya ko‘rsatkichlari massivi

Bir nechta funksiya ko‘rsatkichini massivda ham saqlashingiz mumkin — shunda dastur ishlayotgan paytda qaysi funksiyani bajarishni tanlay olasiz.

Bu misol funksiya ko‘rsatkichlari massivi yordamida uchta turli funksiyani bajaradi:

Misol

void add() { printf("Add\n"); } void subtract() { printf("Subtract\n"); } void multiply() { printf("Multiply\n"); } int main() {   void (*operations[3])() = { add, subtract, multiply };   for (int i = 0; i < 3; i++) {     operations[i]();   }   return 0; }

O‘zingiz sinab ko‘ring »

Bu ko‘pincha oddiy menyular, buyruqlar ro‘yxatlari yoki kalkulyatorlarda — foydalanuvchi kiritgan ma’lumotga qarab turli funksiyalarni chaqirish kerak bo‘lgan har qanday joyda qo‘llaniladi.

Misol

Funksiya ko‘rsatkichlari massividan foydalanadigan oddiy kalkulyator:

void add(int a, int b) { printf("Result: %d\n", a + b); } void subtract(int a, int b) { printf("Result: %d\n", a - b); } void multiply(int a, int b) { printf("Result: %d\n", a * b); } int main() {   int choice, x = 10, y = 5;   void (*operations[3])(int, int) = { add, subtract, multiply };   printf("x = %d, y = %d\n\n", x, y);   printf("Choose an operation:\n");   printf("0: Add\n1: Subtract\n2: Multiply\n");   scanf("%d", &choice);   if (choice >= 0 && choice < 3) {     operations[choice](x, y);   } else {     printf("Invalid choice!\n");   }   return 0; }

Misolni ishga tushirish »

Ushbu dasturda:

  • Uchala matematik funksiya (add(), subtract() va multiply()) massivda saqlanadi.
  • Foydalanuvchi son kiritib, qaysi birini bajarishni tanlaydi.
  • So‘ngra kerakli funksiya ko‘rsatkichlar massivi orqali chaqiriladi.

Bu funksiya ko‘rsatkichlari massivlari dasturlarni qanday qilib moslashuvchan va qayta foydalanishga qulay qilishining oddiy misoli.


Funksiya ko‘rsatkichi va oddiy funksiya

Oddiy funksiya Funksiya ko‘rsatkichi
Bevosita nomi orqali chaqiriladi Ko‘rsatkich orqali chaqiriladi
Funksiya dastur ishga tushishidan oldin belgilanadi Qaysi funksiyani chaqirishni dastur ishlayotgan paytda tanlash mumkin
Oddiy kod uchun mos Moslashuvchan va qayta foydalaniladigan kod uchun mos

Xulosa

  • Funksiya ko‘rsatkichi funksiyaning manzilini saqlaydi.
  • U orqali funksiyalarni e’lon qilish, o‘zlashtirish va chaqirish mumkin.
  • U funksiyalarni boshqa funksiyalarga argument sifatida uzatish imkonini beradi.
  • Callback funksiyalari, menyular va moslashuvchan dastur tuzilmasi uchun foydali.


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!