პოინტერი მასივის წინააღმდეგ
მაჩვენებელი არის მონაცემთა ტიპი, რომელიც შეიცავს მითითებას მეხსიერების მდებარეობაზე (ანუ მაჩვენებლის ცვლადი ინახავს მეხსიერების მდებარეობის მისამართს, რომელშიც ინახება გარკვეული მონაცემები). მასივები არის ყველაზე ხშირად გამოყენებული მონაცემთა სტრუქტურა ელემენტების კოლექციის შესანახად. პროგრამირების ენების უმეტესობა გვთავაზობს მეთოდებს, რათა ადვილად გამოაცხადოთ მასივები და წვდომა ელემენტების მასივებში.
რა არის პოინტერი?
მაჩვენებელი არის მონაცემთა ტიპი, რომელიც ინახავს მეხსიერების მდებარეობის მისამართს, რომელშიც ინახება გარკვეული მონაცემები. სხვა სიტყვებით რომ ვთქვათ, მაჩვენებელს აქვს მინიშნება მეხსიერების მდებარეობაზე. მეხსიერების ადგილას შენახულ მონაცემებზე წვდომას, რომელსაც მიუთითებს მაჩვენებელი, ეწოდება გაუქმება.განმეორებადი ოპერაციების შესრულებისას, როგორიცაა ხეების/სტრიქონების გადაკვეთა, ცხრილების ძიება და ა.შ., მაჩვენებლების გამოყენება გააუმჯობესებს შესრულებას. ეს იმიტომ ხდება, რომ მითითებების გაუქმება და კოპირება უფრო იაფია, ვიდრე რეალურად კოპირება და წვდომა მაჩვენებლების მიერ მითითებულ მონაცემებზე. null მაჩვენებელი არის მაჩვენებელი, რომელიც არაფერზე მიუთითებს. ჯავაში ნულ მაჩვენებელზე წვდომა გამოიმუშავებს გამონაკლისს, რომელსაც ეწოდება 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 ოპერატორი დააბრუნებს მასივის მთელ ზომას, ხოლო როდესაც მიმართავენ მაჩვენებელს, ის დააბრუნებს მხოლოდ მაჩვენებლის ზომას.