Ցուցիչ ընդդեմ զանգված
Ցուցիչը տվյալների տեսակ է, որը հղում է կատարում հիշողության վայրին (այսինքն՝ ցուցիչի փոփոխականը պահում է հիշողության վայրի հասցեն, որտեղ որոշ տվյալներ են պահվում): Զանգվածներն ամենից հաճախ օգտագործվող տվյալների կառուցվածքն են տարրերի հավաքածուն պահելու համար: Ծրագրավորման լեզուներից շատերը հնարավորություն են տալիս հեշտությամբ հայտարարել զանգվածներ և մուտքի տարրեր զանգվածներում:
Ի՞նչ է ցուցիչը:
Ցուցիչը տվյալների տեսակ է, որը պահում է հիշողության վայրի հասցեն, որտեղ որոշ տվյալներ են պահվում: Այլ կերպ ասած, ցուցիչը հղում է կատարում հիշողության վայրին: Հիշողության վայրում պահվող տվյալներին մուտք գործելը, որին մատնանշում է ցուցիչը, կոչվում է ապահղում:Կրկնվող գործողություններ կատարելիս, ինչպիսիք են ծառերի/տողերի անցումը, աղյուսակների որոնումները և այլն, ցուցիչները կբարելավեն կատարողականությունը: Դա պայմանավորված է նրանով, որ ցուցիչների անջատումն ու պատճենումն ավելի էժան է, քան ցուցիչների կողմից նշված տվյալների իրական պատճենումն ու մուտքը: Զեղծ ցուցիչը ցուցիչ է, որը ոչ մի բանի վրա չի մատնանշում: Java-ում զրոյական ցուցիչ մուտք գործելը կառաջացնի բացառություն, որը կոչվում է NullPointerException:
Ի՞նչ է զանգվածը:
Ցուցադրված է նկար 1-ում, կոդի կտոր է, որը սովորաբար օգտագործվում է զանգվածին արժեքներ հայտարարելու և վերագրելու համար: Նկար 2-ում պատկերված է, թե ինչպիսի տեսք կունենա զանգվածը հիշողության մեջ:
int արժեքներ[5]; արժեքներ[0]=100; արժեքներ[1]=101; արժեքներ[2]=102; արժեքներ[3]=103; արժեքներ[4]=104; |
Նկար 1. Զանգվածին արժեքներ հայտարարելու և վերագրելու ծածկագիր
100 | 101 | 102 | 103 | 104 |
Ինդեքս՝ 0 | 1 | 2 | 3 | 4 |
Նկար 2. Հիշողության մեջ պահվող զանգված
Վերևի կոդը սահմանում է զանգված, որը կարող է պահել 5 ամբողջ թվեր, և դրանք հասանելի են՝ օգտագործելով 0-ից 4 ինդեքսները: Զանգվածի կարևոր հատկությունն այն է, որ ամբողջ զանգվածը հատկացվում է որպես հիշողության մեկ բլոկի, և յուրաքանչյուր տարր ստանում է իր սեփական տարածք զանգվածում: Երբ զանգվածը սահմանվում է, դրա չափը ֆիքսվում է: Այսպիսով, եթե կազմման պահին վստահ չեք զանգվածի չափի մասին, դուք պետք է սահմանեք բավականաչափ մեծ զանգված՝ ապահով կողմում գտնվելու համար: Բայց, շատ դեպքերում, մենք իրականում պատրաստվում ենք օգտագործել ավելի քիչ թվով տարրեր, քան մենք հատկացրել ենք: Այսպիսով, զգալի քանակությամբ հիշողություն իրականում վատնում է:Մյուս կողմից, եթե «բավականաչափ մեծ զանգվածը» իրականում բավականաչափ մեծ չէ, ծրագիրը կխափանվի:
Ո՞րն է տարբերությունը ցուցիչների և զանգվածների միջև:
Ցուցիչը տվյալների տեսակ է, որը պահում է հիշողության վայրի հասցեն, որտեղ պահվում են որոշ տվյալներ, մինչդեռ զանգվածները ամենահաճախ օգտագործվող տվյալների կառուցվածքն են տարրերի հավաքածու պահելու համար: C ծրագրավորման լեզվում զանգվածների ինդեքսավորումն իրականացվում է ցուցիչի թվաբանության միջոցով (այսինքն x զանգվածի i-րդ տարրը համարժեք կլինի (x+i)): Հետևաբար, C-ում ցուցիչների մի շարք, որոնք մատնանշում են մի շարք հիշողության վայրեր, որոնք հաջորդական են, կարելի է դիտարկել որպես զանգված: Ավելին, կա տարբերություն, թե ինչպես է sizeof օպերատորը գործում ցուցիչների և զանգվածների վրա: Երբ կիրառվում է զանգվածի վրա, sizeof օպերատորը կվերադարձնի զանգվածի ամբողջ չափը, մինչդեռ երբ կիրառվում է ցուցիչի վրա, այն կվերադարձնի միայն ցուցիչի չափը: