Ko‘rsatkichlar va massivlar


ULASHISH

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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »


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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »

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
O‘zingiz sinab ko‘ring »

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!