Ko‘rsatkichlar va massivlar
Ko‘rsatkichlar va massivlar
Ko‘rsatkichlardan massivlarga murojaat qilish uchun ham foydalanishingiz mumkin.
Quyidagi butun sonlar massivini ko‘rib chiqaylik:
Misol
int myNumbers[4] = {25, 50, 75, 100};
Massivlar bobidan massiv elementlarini for sikli yordamida aylanib chiqish mumkinligini bilib oldingiz:
Misol
int myNumbers[4] = {25, 50, 75, 100};
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", myNumbers[i]);
}
Natija:
25
50
75
100
Har bir massiv elementining qiymatini chiqarish o‘rniga, har bir elementning xotira manzilini chiqaraylik:
Misol
int myNumbers[4] = {25, 50, 75, 100};
int i;
for (i = 0; i < 4; i++) {
printf("%p\n", &myNumbers[i]);
}
Natija:
0x7ffe70f9d8f0
0x7ffe70f9d8f4
0x7ffe70f9d8f8
0x7ffe70f9d8fc
E’tibor bering, har bir element xotira manzilining oxirgi raqami farq qiladi — u har safar 4 ga ortadi.
Buning sababi — int tipining o‘lchami odatda 4 baytni tashkil qiladi, eslang:
Misol
// Create an int variable
int myInt;
// Get the memory size of an int
printf("%zu", sizeof(myInt));
Natija:
4
Demak, yuqoridagi "xotira manzili misoli"dan ko‘rinib turibdiki, kompilyator massivning har bir elementi uchun 4 bayt xotira ajratadi, ya’ni butun massiv xotirada 16 bayt (4 * 4) joy egallaydi:
Misol
int myNumbers[4] = {25, 50, 75, 100};
// Get the size of the myNumbers array
printf("%zu", sizeof(myNumbers));
Natija:
16
Ko‘rsatkichlar massivlar bilan qanday bog‘liq
Xo‘sh, ko‘rsatkichlar va massivlar o‘rtasida qanday bog‘liqlik bor? Gap shundaki, C tilida massiv nomi aslida massivning birinchi elementiga ishora qiluvchi ko‘rsatkichdir.
Chalkashib qoldingizmi? Keling, buni yaxshiroq tushunishga harakat qilamiz va yuqoridagi "xotira manzili misoli"dan yana foydalanamiz.
Birinchi elementning xotira manzili massiv nomi bilan bir xil:
Misol
int myNumbers[4] = {25, 50, 75, 100};
// Get the memory address of the myNumbers array
printf("%p\n", myNumbers);
// Get the memory address of the first array element
printf("%p\n", &myNumbers[0]);
Natija:
0x7ffe70f9d8f0
0x7ffe70f9d8f0
Bu, aslida, massivlar bilan ko‘rsatkichlar orqali ishlashimiz mumkinligini anglatadi!
Qanday qilib? myNumbers o‘zining birinchi elementiga ishora qiluvchi ko‘rsatkich bo‘lgani uchun, unga murojaat qilishda * operatoridan foydalanishingiz mumkin:
Misol
int myNumbers[4] = {25, 50, 75, 100};
// Get the value of the first element in myNumbers
printf("%d", *myNumbers);
Natija:
25
myNumbers massivining qolgan elementlariga murojaat qilish uchun ko‘rsatkich/massivni oshirishingiz mumkin (+1, +2 va h.k.):
Misol
int myNumbers[4] = {25, 50, 75, 100};
// Get the value of the second element in myNumbers
printf("%d\n", *(myNumbers + 1));
// Get the value of the third element in myNumbers
printf("%d", *(myNumbers + 2));
// and so on..
Natija:
50
75
Yoki uni sikl bilan aylanib chiqing:
Misol
int myNumbers[4] = {25, 50, 75, 100};
int *ptr = myNumbers;
int i;
for (i = 0; i < 4; i++) {
printf("%d\n", *(ptr + i));
}
Natija:
25
50
75
100
Ko‘rsatkichlar yordamida massiv elementlarining qiymatini o‘zgartirish ham mumkin:
Misol
int myNumbers[4] = {25, 50, 75, 100};
// Change the value of the first element to 13
*myNumbers = 13;
// Change the value of the second element to 17
*(myNumbers +1) = 17;
// Get the value of the first element
printf("%d\n", *myNumbers);
// Get the value of the second element
printf("%d\n", *(myNumbers + 1));
Natija:
13
17
Massivlar bilan bunday ishlash biroz ortiqcha tuyulishi mumkin. Ayniqsa, yuqoridagi misollardagi kabi oddiy massivlar bilan. Biroq katta massivlarda ularga ko‘rsatkichlar orqali murojaat qilish va ularni boshqarish ancha samaraliroq bo‘lishi mumkin.
Ikki o‘lchovli massivlarga ko‘rsatkichlar orqali murojaat qilish ham tezroq va osonroq hisoblanadi.
Stringlar aslida massiv bo‘lgani uchun stringlarga murojaat qilishda ham ko‘rsatkichlardan foydalanishingiz mumkin.
Hozircha bu qanday ishlashini bilishingizning o‘zi ajoyib. Lekin oldingi bobda aytganimizdek, ko‘rsatkichlar bilan ehtiyotkorlik bilan ishlash kerak, chunki xotirada saqlangan boshqa ma’lumotlar ustidan yozib yuborish mumkin.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
