#include int Yigindi(int,...); void main() { cout<<“\nYigindi(2,6,4)=”< cout<<“\nYigindi(6,1,2,3,4,5,6)=” cout< } int Yigindi(int k,...) { int *ptr=&k int s=0; for(;k;k--)s+=*(++ptr); return s; }
Natija:
Yigindi(2,6,4)=10
Yigindi(6,1,2,3,4,5,6)=21
Ikkala misolda ham noma’lum parametrlar berilgan maxsus parametr turini qabul qilgan. Har xil turdagi parametrlarni ishla-tish uchun turni aniqlaydigan parametr kiritish kerak:#include float Summa(char,int,…); void main() { cout< cout< cout< } int Summa(char z,int k,…) { switch(z) { case ’i’: { int *ptr=&k+1; int s=0; for (;k--;ptr++) s+=*(ptr); return (float)s; } case ’f’: { float*ptr=(float *)(&k+1); float s=0.0; for (;k--;ptr++) s+=*(ptr); return s; } default: { cout<<”\n parametr hato berilgan”; return 9999999.0; } } } 1.5. O‘zgaruvchan parametrli funksiyalar YUqorida keltirilgan misolda noma’lum parametrlarni turini aniqlash masalasi kompilyator tomonidan emas, balki prog-ramma tuzuvchisi tomonidan hal qilingan.
Quyidagi dastur ko’rsatkichning xatti harakatini aniqlab beradi. Biz bir hil qaytarishni amalga oshiramiz ikki marta, lekin hisob ko’rsatkichi uchun turi xil qiymatlar bilan bir hil hisob o’zgartiriladi.
ch07/accounts.cpp 1 #include 2 3using namespace std;
4 5 int main()
6 {
7 double harrys_account = 0;
8 double joint_account = 2000;
9 double* account_pointer = &harrys_account;
10 11*account_pointer = 1000; // Dastlabki jamg'arma 12 13*account_pointer = *account_pointer -100; // qaytarish $100 ga 14cout <<"Balance: " << *account_pointer <chiquvchi balans 15 16//korsatkich qiymatini o'zgartirish 17 account_pointer = &joint_account;
18 19//bitte yozuv boshqa boshqa hisob raqamlarini ifodalaydi 20*account_pointer = *account_pointer -100; // qaytish $100 21cout << "Balance: " << *account_pointer<chiquvchi balans 15 23 return 0;
24 }
Natija: Balance: 900 Balance: 1900 1. Bu to'plam operatorlarini ko'rib chiqamiz.
int a = 1;
int b = 2;
int* p = &a;
cout << *p << endl;
p = &b;
cout << *p << endl;
2. Bu to'plam operatorlarini ko'rib chiqamiz.
int a = 1;
int b = 2;
Ma'lumotning qaysidir ko'rsatgichlari uchun inkor ko'rsatgichlari Ko'rsatgichning xotira manzillari — xotirada joylashgan qator qiymatlarini aytadi. Bu xulosaning umumiy xatosi bo'ladi
double* account_pointer = &joint_account;
account_pointer = 1000; // Error
Belgilash bayonotida 1000 hisobot balansi belgilanmagan. Buning o'rniga, faqat o'zgaruvchan qo'shma hisob ko'rsatgichlarini tasvirlab programma zimmasiga ishora markerini sozlaydi va faqatgina 1000 manzilni emas . Ko'p kompilyatorlar bu topshiriq uchun xato xisobot beradi.
Aslida o'zgaruvchi, foydalanishi uchun*account_pointer ishlatiladi:
*account_pointer = 1000; // OK
Xar bir ko'rsatkich o'zgaruvchilari uchun alohida tarifi bilan ishlatish Bu kabi bir nechta o'zgaruvchilarni aniqlashda C++ huquqiy hisoblanadi:
int i = 0, j = 1;
Bu usulda ko'rsatgichlardan foydalanish, chalkashliklarga olib keladi:
double* p, q;
* faqat boshlang'ich o'zgaruvchilar bilan bog'laydi. Yani, p qo'shaloq * qiymat bo'lib, q
unga qo'shaloq qiymat bo'ladi. Kelib chiqishi mumkin bo'lgan tartibsizlikni oldini olish uchun ko'rsatgichlarni alohida aniqlash kerak:
double* p; double* q;
Nazorat savollari Ko’rsatgichlar nima?
Nimaga ko’rsatgichlar qulay emas?
Kompyuter o’yinlari yaratish uchun dasturchi qay darajada malakali bo’lishi kerak deb o’ylaysiz?
Joriy bajarilayotgan ko’rsatgichlar qayerda saqlanadi?
Kompyuterni arifmetik amallarni bajaradi?
kompilyator apparat ta’minotmi yoki dasturiymi?
Qasyi jihati uchun C++ foydalanuvchilarga juda muhim