Pointer vs Array
Kielekezi ni aina ya data ambayo hushikilia marejeleo ya eneo la kumbukumbu (yaani, kielekezi tofauti huhifadhi anwani ya eneo la kumbukumbu ambapo baadhi ya data huhifadhiwa). Mkusanyiko ndio muundo wa data unaotumika sana kuhifadhi mkusanyiko wa vipengee. Lugha nyingi za programu hutoa mbinu za kutangaza kwa urahisi safu na kufikia vipengele katika safu.
Kielekezi ni nini?
Kielekezi ni aina ya data inayohifadhi anwani ya eneo la kumbukumbu ambapo baadhi ya data huhifadhiwa. Kwa maneno mengine, pointer inashikilia kumbukumbu ya eneo la kumbukumbu. Kufikia data iliyohifadhiwa katika eneo la kumbukumbu ambalo linarejelewa na pointer inaitwa dereferencing. Wakati wa kutekeleza utendakazi unaojirudia kama vile kuvuka miti/mifuatano, ukaguzi wa jedwali, n.k., kutumia viashiria kunaweza kuboresha utendakazi. Hii ni kwa sababu kuondoa rejeleo na viashiria vya kunakili ni bei rahisi kuliko kunakili na kupata data iliyoelekezwa na viashiria. Pointer null ni pointer ambayo haielekezi kwa chochote. Katika Java, kupata kielekezi kisicho na maana kunaweza kutoa ubaguzi unaoitwa NullPointerException.
Array ni nini?
Inavyoonyeshwa kwenye mchoro wa 1, ni sehemu ya msimbo ambayo kwa kawaida hutumika kutangaza na kugawa thamani kwa mkusanyiko. Kielelezo cha 2 kinaonyesha jinsi safu inaweza kuonekana kama kwenye kumbukumbu.
thamani za ndani[5]; thamani[0]=100; thamani[1]=101; thamani[2]=102; thamani[3]=103; thamani[4]=104; |
Kielelezo 1: Msimbo wa kutangaza na kugawa thamani kwa safu
100 | 101 | 102 | 103 | 104 |
Fahirisi: 0 | 1 | 2 | 3 | 4 |
Kielelezo 2: Mkusanyiko uliohifadhiwa kwenye kumbukumbu
Nambari iliyo hapo juu inafafanua safu ambayo inaweza kuhifadhi nambari 5 kamili na zinaweza kufikiwa kwa kutumia fahirisi 0 hadi 4. Sifa moja muhimu ya safu ni kwamba, safu nzima imetengwa kama hifadhi moja ya kumbukumbu na kila kipengele hupata yake. nafasi mwenyewe katika safu. Mara safu inapofafanuliwa, ukubwa wake umewekwa. Kwa hivyo ikiwa huna uhakika juu ya saizi ya safu wakati wa kukusanya, utalazimika kufafanua safu kubwa ya kutosha kuwa katika upande salama. Lakini, mara nyingi, kwa kweli tutatumia idadi ndogo ya vipengele kuliko tulivyotenga. Hivyo kiasi kikubwa cha kumbukumbu ni kweli kupita. Kwa upande mwingine ikiwa "safu kubwa ya kutosha" si kubwa vya kutosha, programu inaweza kuacha kufanya kazi.
Kuna tofauti gani kati ya Viashiria na Arrays?
Kielekezi ni aina ya data ambayo huhifadhi anwani ya eneo la kumbukumbu ambamo baadhi ya data huhifadhiwa, ilhali Mikusanyiko ndiyo muundo wa data unaotumika zaidi kuhifadhi mkusanyiko wa vipengele. Katika lugha ya programu C, uwekaji faharasa wa safu hufanywa kwa kutumia hesabu ya kielekezi (yaani kipengele cha ith cha safu x kitakuwa sawa na (x+i)). Kwa hivyo katika C, seti ya viashiria vinavyoelekeza kwenye seti ya maeneo ya kumbukumbu ambayo yanafuatana, yanaweza kuzingatiwa kama safu. Zaidi ya hayo, kuna tofauti katika jinsi saizi ya mwendeshaji hufanya kazi kwenye viashiria na safu. Inapotumika kwa mkusanyiko, sizeof opereta itarejesha ukubwa wote wa safu, ilhali inapotumika kwa kielekezi, itarejesha tu ukubwa wa kielekezi.