C++ ko'rsatkichlar va massivlar
C++ tilida Pointers variables bo'lib, u boshqa o'zgaruvchilarning manzillarini saqlaydi. Ko'rsatkich nafaqat bitta o'zgaruvchining manzilini, balki array katakchalari manzilini ham saqlashi mumkin.
Ushbu misolni ko'rib chiqing:
int *ptr;
int arr[5];
// birinchisining manzilini saqlang
// ptrdagi arr elementi
ptr = arr;
Bu erda ptr ko'rsatkich o'zgaruvchisi, arr esa int massividir. ptr = arr; kodi massivning birinchi elementi manzilini ptr o'zgaruvchisida saqlaydi.
E'tibor bering, biz &arr[0] o'rniga arr dan foydalanganmiz. Buning sababi, ikkalasi ham bir xil. Shunday qilib, quyidagi kod yuqoridagi kod bilan bir xil.
int *ptr;
int arr[5];
ptr = &arr[0];
Massivning qolgan elementlari uchun manzillar &arr[1] , &arr[2] , &arr[3] va &arr[4] tomonidan berilgan.
Aytaylik, bir xil ptr ko'rsatkichidan foydalanib, massivning to'rtinchi elementiga ishora qilishimiz kerak.
Bu erda, agar ptr yuqoridagi misoldagi birinchi elementga ishora qilsa, ptr + 3 to'rtinchi elementga ishora qiladi. Masalan,
int *ptr;
int arr[5];
ptr = arr;
ptr + 1 is equivalent to &arr[1];
ptr + 2 is equivalent to &arr[2];
ptr + 3 is equivalent to &arr[3];
ptr + 4 is equivalent to &arr[4];
Xuddi shunday, biz bitta ko'rsatkich yordamida elementlarga kira olamiz. Masalan,
// dereference operatoridan foydalaning
*ptr == arr[0];
*(ptr + 1) is equivalent to arr[1];
*(ptr + 2) is equivalent to arr[2];
*(ptr + 3) is equivalent to arr[3];
*(ptr + 4) is equivalent to arr[4];
Aytaylik, agar biz ptr = &arr[2]; -ni ishga tushirgan bo'lsak
ptr - 2 is equivalent to &arr[0];
ptr - 1 is equivalent to &arr[1];
ptr + 1 is equivalent to &arr[3];
ptr + 2 is equivalent to &arr[4];
Working of C++ Pointers with Arrays

[!NOTE] Ptr va ptr + 1 orasidagi manzil 4 baytga farq qiladi. Buning sababi, ptr
intma'lumotlariga ko'rsatgichdir. Va 64 bitli operatsion tizimda int hajmi 4 baytni tashkil qiladi. Xuddi shunday, agar ptr ko'rsatkichichartipidagi ma'lumotlarga ishora qilsa, ptr va ptr + 1 o'rtasidagi manzil 1 baytga teng. Buning sababi, belgi hajmi 1 bayt.
// Massivning har bir elementining manzilini ko'rsatish uchun C++ dasturi
#include <iostream>
using namespace std;
int main()
{
float arr[3];
// ko'rsatkich o'zgaruvchisini e'lon qilish
float *ptr;
cout << "Displaying address using arrays: " << endl;
// massivning barcha manzillarini chop etish uchun for loop dan import
for (int i = 0; i < 3; ++i)
{
cout << "&arr[" << i << "] = " << &arr[i] << endl;
}
// ptr = &arr[0]
ptr = arr;
cout<<"\nDisplaying address using pointers: "<< endl;
// massivning barcha manzillarini chop etish uchun for loop dan import
// ko'rsatkich belgilaridan foydalanish
for (int i = 0; i < 3; ++i)
{
cout << "ptr + " << i << " = "<< ptr + i << endl;
}
return 0;
}
Chiqish
Displaying address using arrays:
&arr[0] = 0x61fef0
&arr[1] = 0x61fef4
&arr[2] = 0x61fef8
Displaying address using pointers:
ptr + 0 = 0x61fef0
ptr + 1 = 0x61fef4
ptr + 2 = 0x61fef8
Yuqoridagi dasturda biz ptr ko'rsatkich o'zgaruvchisidan foydalanmasdan avval massiv elementlarining manzillarini oddiygina chop etdik.
Keyin, biz a[0] manzilini ko'rsatish uchun ptr ko'rsatkichidan, a[1] manzilini ko'rsatish uchun ptr + 1 va hokazolardan foydalandik.
Ko'pgina kontekstlarda massiv nomlari ko'rsatkichlarga aylanadi. Oddiy so'zlar bilan aytganda, massiv nomlari ko'rsatkichlarga aylantiriladi. Shuning uchun biz massivlar elementlariga kirish uchun ko'rsatgichlardan foydalanishimiz mumkin.
Biroq, shuni yodda tutishimiz kerakki, ko'rsatkichlar va massivlar bir xil emas.
Massiv nomlari ko'rsatkichlarga aylanmaydigan bir necha holatlar mavjud. Qo'shimcha ma'lumot olish uchun tashrif buyuring: When does array name doesn't decay into a pointer?
// C++ Koʻrsatkich belgisi yordamida kiritilgan maʼlumotlarni kiritish va koʻrsatish dasturi.
#include <iostream>
using namespace std;
int main() {
float arr[5];
// Ko'rsatkich belgisi yordamida ma'lumotlarni kiriting
cout << "Enter 5 numbers: ";
for (int i = 0; i < 5; ++i) {
// kiritilgan raqamni arr[i] da saqlash
cin >> *(arr + i) ;
}
// Ko'rsatkich belgisi yordamida ma'lumotlarni ko'rsatish
cout << "Displaying data: " << endl;
for (int i = 0; i < 5; ++i) {
// arr[i] ning ekran qiymati
cout << *(arr + i) << endl ;
}
return 0;
}
Chiqish
Enter 5 numbers: 2.5
3.5
4.5
5
2
Displaying data:
2.5
3.5
4.5
5
2
Bu yerga,
cin >> *(arr + i) ; Bu kod quyidagi kodga teng: cin >> arr[i]; E'tibor bering, biz alohida ko'rsatkich o'zgaruvchisini e'lon qilmaganmiz, aksincha biz ko'rsatkich belgisi uchun arr massiv nomidan foydalanmoqdamiz. Bizga ma'lumki, arr massiv nomi massivning birinchi elementiga ishora qiladi. Shunday qilib, biz arrni ko'rsatkich vazifasini bajaradi deb o'ylashimiz mumkin.
2.Xuddi shunday, biz for siklidan arr qiymatlarini ko'rsatkich belgisi yordamida ko'rsatish uchun foydalandik. cout << *(arr + i) << endl ; Bu kod ga teng cout << arr[i] << endl ;