Pointer at Sanggunian
Ang parehong mga payo at mga sanggunian ay ang pinaka-makapangyarihang tampok sa C at C ++ na nagpapahintulot sa mga programmer na manipulahin ang direksiyon ng memorya nang direkta para sa mahusay na pamamahala ng memorya.
Parehong mga variable na ginagamit upang sumangguni sa ibang mga bagay nang di-tuwiran at nagbabahagi sila ng ilang karaniwang mga tampok sa ibabaw. Kahit na nagbabahagi sila ng maraming mga karaniwang kakayahan, ang mga ito ay masyadong kumplikado upang maunawaan.
Ang pointer ay isang variable na humahawak sa memory address ng ibang variable, samantalang ang reference ay tulad ng isang pointer na maaaring magamit upang hindi tuwirang sumangguni sa ibang variable.
Karamihan sa mga programmer ay tila nauunawaan ang tungkol sa kung kailan gagamitin ang mga payo at kung kailan gumamit ng mga sanggunian, ngunit madalas na nakikita nila ang mga problema na ang solusyon ay tila hindi malinaw.
Kaya upang mas mahusay na maunawaan ang pilosopiya, alamin natin ang pagkakaiba ng dalawa.
Ano ang isang pointer?
Ang bawat variable ay isang lokasyon ng memorya na tinukoy sa pamamagitan ng address nito at ipinares sa isang identifier na naglalaman ng ilang halaga na maaaring mabago sa panahon ng kurso ng isang programa. Sa mga simpleng termino, variable ay isang simbolo na kumakatawan sa isang dami.
Ang isang pointer ay isang variable na naglalaman ng memory address ng isa pang variable. Ang pointer ay walang anuman kundi isang address at isang variable na nag-iimbak ng pointer ay tinatawag na variable pointer.
Ang ideya ay ang paggamit ng mga tagapagpakilala (o mga pangalan) sa halip na mga numerong address upang mabawasan ang pasanin ng programming sa gayon pagbabawas ng pagiging kumplikado ng mga programa. Dahil ang mga address na ito ay tumutukoy sa mga aktwal na lokasyon sa memory ng computer, maaaring gamitin ang mga payo upang ma-access at manipulahin ang nilalaman na nakaimbak sa memorya.
Tulad ng anumang variable o pare-pareho, ang mga payo ay dapat ipahayag para sa kanilang mga uri. Dahil ang mga payo ay naglalaman ng mga address ng memory na nabibilang sa isang hiwalay na uri ng data, dapat itong ideklara gamit ang mga payo bago ka makapagtrabaho sa kanila. Ang pangkalahatang anyo ng isang deklarasyon ng pointer ay:
Data_type * var-name;
Dito, ang "Data_type" ay ang batayang uri ng pointer at ang "var-name" ay ang pointer variable. Ang asterisk (*) dito ay ginagamit upang ipahayag ang pointer na nagtatalaga ng variable na "var-name" bilang variable pointer.
int * p; / / integer pointer
lumutang * x; // float pointer
Dito, ang variable na "p" ay tumuturo sa isang uri ng data ng integer na ipinahayag bilang "int" na tumutukoy sa uri ng data ng variable. Katulad nito, sa pangalawang halimbawa, ang "float" ay tumutukoy sa uri ng data ng variable na "x" na sa katunayan ay itinalaga bilang isang pointer sa isang floating-point variable.
Ano ang isang Sanggunian?
Ang isang sanggunian ay tulad ng isang pointer na may di-tuwirang pag-access sa isang variable. Ito ay tulad ng isang alias para sa isa pang variable, ibig sabihin ito ay isa lamang pangalan para sa isang umiiral na variable.
Pinapayagan nito ang mga programmer na lumikha ng pangalawang pangalan para sa variable na magagamit nila upang mamanipula ang nilalaman na nakaimbak sa variable na iyon. Ito ay isang entity na isang alyas para sa isa pang variable at mayroon itong parehong address bilang orihinal na variable. Sinusuportahan nito ang pass-by-reference acting bilang function na pormal na parameter at sa sandaling tinukoy na ito upang sumangguni sa isang variable, hindi ito maaaring reseated na nangangahulugang hindi ito maaaring ma-refer sa ibang variable.
Hindi tulad ng mga payo, hindi nila kailangan ang operator ng dereferencing upang ma-access ang halaga; sa katunayan, maaari silang magamit gaya ng mga normal na variable.
int i;
int & ri = i;
Dito, ang "ri" ay isang sanggunian ng integer na nasimulan sa "i". Ipinapahayag nito ang "ri" bilang isang bagay ng uri ng "reference sa int". Ang isang sanggunian ay madaling malito sa isang pointer na isang malayang variable, ang mga halaga ng address na hindi maaaring ma-reassign sa sandaling nilikha.
Pagkakaiba sa pagitan ng Pointer at Reference
- Parehong nagbibigay ng halos katulad na mga kakayahan sa mga tuntunin ng usability at ang pagkakaiba ay maaaring nakakalito. Ang pointer ay isang variable lamang na nag-iimbak ng memory address ng ibang variable, samantalang ang reference ay katulad ng isang alias para sa isang umiiral nang variable. Lumilikha ito ng pangalawang pangalan para sa isang variable na maaaring magamit upang baguhin ang nilalaman na nakaimbak sa variable na iyon.
- Ang isang pointer ay tulad ng anumang iba pang mga variable na nag-iimbak ng isang piraso ng data. Hindi tulad ng ibang mga variable, ang mga variable ng pointer ay nagtatago ng mga address ng memorya sa halip na mga halaga. Ang pointer ay dereferenced gamit ang operator ng indirection * upang ma-access ang lokasyon ng memorya ng variable na itinuturo nito. Ang isang reference, sa kabilang banda, ay hindi nangangailangan ng anumang dereferencing operator upang ma-access ang halaga.
- Hindi tulad ng mga payo na maaaring nasimulan sa anumang oras, ang mga sanggunian ay dapat italaga sa pagsisimula. Maaaring direktang ma-access ang mga payo, samantalang hindi direktang ma-access ang mga sanggunian.
- Ang isang variable ng pointer ay may sariling lokasyon sa memory, na nangangahulugang kapag nagpapahayag ka ng isang pointer, tinukoy mo ang isang lokasyon na isang memory address na nakatalaga sa bawat yunit ng memorya. Ang pointer variable ay may parehong address kung saan ito ay nai-save sa memorya. Ang isang variable ng sanggunian, sa kabilang banda, ay isang alias para sa isa pang variable sa gayon pagkuha ng address ng reference variable.
- NULL ay kumakatawan sa dulo ng listahan na nangangahulugan na ito ay nagpapahiwatig na ang halaga ay hindi kilala at tinutukoy nito na ang variable ay walang wastong puwang ng address. Ang NULL na halaga ay maaaring italaga sa isang direktang pointer variable na nagpapahiwatig na hindi ito tumuturo saanman, subalit ang NULL ay hindi maitatalaga sa isang reference variable.
Pointer vs. Reference: Paghahambing Tsart
Buod ng Pointer vs. Reference
Ang mga payo ay palaging kabilang sa mga paboritong paksa ng talakayan ng mga programmer ng C / C ++ hanggang sa ang mga sanggunian ay dumating sa larawan. Ang mga reperensiya ay medyo katulad ng mga payo ngunit mayroon silang makatarungang bahagi ng mga kalamangan at kahinaan sa paghahambing. Habang ang pareho ay maaaring gamitin upang baguhin ang mga lokal na variable ng isang function sa loob ng isa pang function, mayroon silang mga pagkakaiba. Parehong mga makapangyarihang tampok sa C at C ++ na nagbibigay-daan sa iyo upang direktang mamanipula ang memorya, ngunit may ilang mga eksepsiyon. Ang isang pointer ay humahawak sa memory address ng isang variable, samantalang isang sanggunian ay isang alyas lamang para sa ibang variable.