Ikkala ko'rsatkich va ma'lumotnomalar C va C ++ dasturlarining eng kuchli xususiyatlari bo'lib, ular dasturchilarga xotirani samarali boshqarish uchun to'g'ridan-to'g'ri xotira manzilini boshqarishga imkon beradi.

Ikkalasi ham bilvosita boshqa narsalarga murojaat qilish uchun foydalaniladigan o'zgaruvchilar bo'lib, ular sirtdagi ba'zi umumiy xususiyatlarni baham ko'rishadi. Ular juda ko'p umumiy imkoniyatlarga ega bo'lishlariga qaramay, tushunish uchun juda murakkabdir.

Ko'rsatkich boshqa o'zgaruvchining xotira manzilini o'z ichiga olgan o'zgaruvchidir, havola boshqa o'zgaruvchiga bilvosita murojaat qilish uchun ishlatilishi mumkin bo'lgan ko'rsatkichga o'xshaydi.

Aksariyat dasturchilar ko'rsatgichlarni qachon va qachon ishlatish kerakligi haqida ba'zi bir tushunchalarni rivojlantirayotganga o'xshaydi, ammo ular ko'pincha hal etilishi qiyin bo'lgan muammolarga duch kelishadi.

Shunday qilib, falsafani yaxshiroq tushunish uchun ikkalasi o'rtasidagi farqni tushunaylik.

Ko'rsatkich nima?

Har bir o'zgaruvchi - bu manzilni aniqlaydigan va dastur davomida o'zgarishi mumkin bo'lgan ba'zi bir qiymatlarga ega bo'lgan identifikator bilan bog'langan xotiraning joylashuvi. Oddiy so'zlar bilan aytganda, o'zgaruvchi miqdorni bildiruvchi belgi.

A pointer boshqa o'zgaruvchining xotira manzilini o'z ichiga olgan o'zgaruvchidir. Ko'rsatkich - bu manzilni va o'zgaruvchini saqlaydigan o'zgaruvchilardan boshqa narsa emas.

G'oya dasturiy ta'minot yukini engillashtirish uchun raqamli manzillar o'rniga identifikatorlardan (yoki ismlardan) foydalanish va shu bilan dasturlarning murakkabligini kamaytiradi. Ushbu manzillar kompyuter xotirasidagi haqiqiy joylarni nazarda tutganligi sababli, xotirada saqlanadigan tarkibga kirish va ularni boshqarish uchun markerlardan foydalanish mumkin.

Har qanday o'zgaruvchi yoki doimiy kabi, ko'rsatgichlar ham ularning turlari uchun e'lon qilinishi kerak. Ko'rsatkichlar alohida ma'lumot turiga tegishli bo'lgan xotira manzillarini o'z ichiga olganligi sababli, ular bilan ishlashdan oldin ular ko'rsatgichlar yordamida e'lon qilinishi kerak. Ko'rsatkich deklaratsiyasining umumiy shakli:

Data_type * var-nomi;

Bu erda "Data_type" ko'rsatgichning asosiy turi va "var-name" ko'rsatkichning o'zgaruvchisi. Bu erda yulduzcha (*) o'zgaruvchini "var-name" ni ko'rsatgich o'zgaruvchisi sifatida belgilaydigan ko'rsatgichni e'lon qilish uchun ishlatiladi.

int * p; // butun son

float * x; // suzuvchi ko'rsatgich

Bu erda "p" o'zgaruvchisi "int" deb e'lon qilingan butun son turiga ishora qiladi, bu o'zgaruvchining ma'lumotlar turiga tegishlidir. Xuddi shunday, ikkinchi misolda, "float" "x" o'zgaruvchisining ma'lumotlar turiga ishora qiladi, aslida u o'zgaruvchi-o'zgaruvchiga ishora sifatida belgilanadi.

Malumot nima?

Malumot o'zgaruvchiga bilvosita kirish huquqiga ega ko'rsatgichga o'xshaydi. Bu boshqa o'zgaruvchiga taxallus kabi, ya'ni allaqachon mavjud bo'lgan o'zgaruvchining boshqa nomi.

Bu dasturchilarga ushbu o'zgaruvchida saqlanadigan tarkibni boshqarish uchun foydalanishi mumkin bo'lgan o'zgaruvchining ikkinchi nomini yaratishga imkon beradi. Bu boshqa o'zgaruvchiga taxallus bo'lgan va asl o'zgaruvchi bilan bir xil manzilga ega bo'lgan ob'ekt. Funktsional rasmiy parametrlar sifatida yozilgan havolani qo'llab-quvvatlaydi va o'zgaruvchiga murojaat qilish aniqlangandan so'ng, uni boshqa o'zgaruvchiga havola qilish mumkin emasligini aniqlab bo'lmaydi.

Ko'rsatkichlardan farqli o'laroq, ular qiymatga kirish uchun dereferering operatoriga muhtoj emaslar; Aslida, ular oddiy o'zgaruvchilar kabi ishlatilishi mumkin.

int i;

int & ri = i;

Bu erda "ri" - "i" ga boshlangan butun son. U "ri" ni "havolaga int" turining ob'ekti sifatida e'lon qiladi. Malumotni mustaqil o'zgaruvchini ko'rsatuvchi bilan osongina chalkashtirib yuborish mumkin, uning manzili qiymatlari bir marta yaratilgandan keyin qayta tayinlab bo'lmaydi.

Ko'rsatkich va mos yozuvlar o'rtasidagi farq

  1. Ko'rsatma va mos yozuvlar asoslari

- Ikkalasi ham qulaylik jihatidan deyarli o'xshash imkoniyatlarni taqdim etadi va farq juda qiyin bo'lishi mumkin. Ko'rsatkich - bu boshqa o'zgaruvchining xotira manzilini saqlaydigan o'zgaruvchidir, havolasi esa allaqachon mavjud bo'lgan o'zgaruvchiga o'xshaydi. Bu o'zgaruvchida saqlanadigan tarkibni o'zgartirish uchun ishlatilishi mumkin bo'lgan o'zgaruvchining ikkinchi nomini yaratadi.

  1. Ko'rsatma va ma'lumotnoma deklaratsiyasi

- Ko'rsatkich ma'lumotni saqlaydigan boshqa har qanday o'zgaruvchiga o'xshaydi. Boshqa o'zgaruvchilardan farqli o'laroq, ko'rsatgich o'zgaruvchilari qiymatlar o'rniga xotira manzillarini saqlaydi. Ko'rsatuvchi o'zgaruvchining xotira joyiga kirish uchun bilvosita operatoridan foydalangan holda ishdan chiqariladi. O'z navbatida, ma'lumotnomaga qiymatga kirish uchun biron-bir kechiktiruvchi operator kerak emas.

  1. Yo'naltiruvchi va ma'lumotnomani qayta tayinlash

- Istalgan vaqtda ishga tushirilishi mumkin bo'lgan ko'rsatkichlardan farqli o'laroq, mos yozuvlar initsializatsiya vaqtida tayinlanishi kerak. Ko'rsatkichlarga to'g'ridan-to'g'ri kirish mumkin, havolalarga esa to'g'ridan-to'g'ri kirish mumkin emas.

  1. Yo'naltiruvchi va ma'lumot uchun xotira manzili

- Ko'rsatkich o'zgaruvchisi xotirada o'z joylashuviga ega, ya'ni siz ko'rsatgichni e'lon qilganingizda, siz har bir xotira birligiga tayinlangan xotira manzili bo'lgan manzilni belgilaysiz. Ko'rsatkich o'zgaruvchisi xotirada saqlanadigan manzilga ega. Boshqa tomondan, mos yozuvlar o'zgaruvchisi boshqa o'zgaruvchiga taxallus bo'lib, shu bilan mos yozuvlar o'zgaruvchisining manzilini oladi.

  1. Ko'rsatkich va ma'lumot uchun NULL qiymat

- NULL ro'yxatning oxirini anglatadi, bu qiymat noma'lumligini bildiradi va o'zgaruvchining haqiqiy manzil manzili bo'lmasligini bildiradi. NULL qiymati ko'rsatgich o'zgaruvchisiga to'g'ridan-to'g'ri tayinlanishi mumkin, bu esa u biron bir joyga ishora qilmasligini anglatadi, NULL esa mos yozuvlar o'zgaruvchisiga tayinlanishi mumkin emas.

Ko'rsatkich va mos yozuvlar: taqqoslash jadvali

Yo'naltiruvchi va qisqacha ma'lumotnoma

Ko'rsatmalar rasmga tushgunga qadar ko'rsatgichlar har doim C / C ++ dasturchilarining munozarali mavzularidan biri bo'lib kelgan. Malumotlar ko'rsatgichlarga biroz o'xshaydi, ammo ularning taqqoslaganda ijobiy va salbiy tomonlarida teng ulushga ega. Ikkalasini ham bitta funktsiyaning mahalliy parametrlarini boshqa funktsiya ichida o'zgartirish uchun ishlatish mumkin bo'lsa-da, ularning farqlari bor. Ikkalasi ham C va C ++ dagi kuchli xususiyatlar bo'lib, ular xotirani to'g'ridan-to'g'ri boshqarishga imkon beradi, ammo bir nechta istisnolardan tashqari. Ko'rsatkich o'zgaruvchining xotira manzilini o'z ichiga oladi, holbuki havola boshqa o'zgaruvchiga faqat taxallus.

Adabiyotlar

  • Gregoire, Mark. Professional C ++. Nyu-Jersi: John Wiley & Sons, 2014. Chop etish
  • Ozodlik, Jessi va Bredli L. Jons. O'zingizni C ++ ga 21 kun ichida o'rgating. Indianapolis: Sams nashriyoti, 2004. Chop etish
  • Riz, Richard M. S nuqtalarini tushunish va ulardan foydalanish. Sebastopol: O'Reilly Media, 2013. Chop etish
  • Tasvir krediti: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b4/Pointers.svg/541px-Pointers.svg.png
  • Tasvir krediti: https://commons.wikimedia.org/wiki/File:WeakReference01_2x.png#/media/File:WeakReference01_2x.png