Sobes.tech
Junior

რას ნიშნავს მიმთითებელი მონაცემთა ტიპები?

sobes.tech AI

პასუხი AI-სგან

ტიპების მონაცემები, რომლებიც მითითებას (ლინკს) ინახავენ, არა თვით მნიშვნელობას, არამედ მის ადგილმდებარეობას (მისამართს) მეხსიერებაში.

სინიშნულება:

  • მითითების ტიპის ცვლადები შეიძლება შეიცავდეს null-ს.
  • როდესაც ერთი მითითების ტიპის ცვლადს მეორე მიენიჭება, არ კოპირდება თვით მნიშვნელობა, არამედ მისამართი. ორივე ცვლადი იწყებს მითითებას ერთსა და იმავე ადგილას მეხსიერებაში.
  • ცვლილებები, რომლებიც ერთ მითითებაზე კეთდება, ჩანს მეორე მითითებზეც, თუ ორივე ერთსა და იმავე ობიექტს მიუთითებს.
  • მეხსიერების მართვა ხდება გარბიჯის კრეტორის მიერ.

მიმართულებები მითითების ტიპებზე:

  • სტრინგები (String)
  • მასივები
  • მომხმარებლის კლასების ობიექტები
  • დელეგატები (ზოგი ენისთვის)

შედარება მნიშვნელობით ტიპებთან:

მახასიათებელი მნიშვნელობით ტიპები მითითების ტიპები
შენახვა თვით მნიშვნელობა მისამართი მნიშვნელობაზე
კოპირება თვით მნიშვნელობა კოპირებულია მისამართი კოპირებულია
ცვლილება ცვლილებები კოპიაში არ ზემოქმედებს ორიგინალზე ცვლილებები ერთ მითითებაზე ჩანს მეორეზე, თუ ორივე ერთ ობიექტს მიუთითებს
მეხსიერება მართავს სტეკი (stack) მართავს ჰიპი, წმენდს გარბიჯის კრეტორი
მაგალითები int, float, bool, struct (ზოგი ენისთვის) String, Array, Object
// მაგალითი C#-ში
string s1 = "Hello"; // s1 მიუთითებს "Hello" სტრინგზე
string s2 = s1;      // s2 მიუთითებს იმავე მისამართზე, რაც s1-ს

// ცვლილებისას, მეორე მითითებით ეს არ ჩანს,
// რადგან სტრინგები C#-ში იმუტაბლია. 
// ცვლილების დროს ახალი სტრინგი იქმნება და მისამართი გადამისამართდება.
s1 = "World"; 

Console.WriteLine(s2); // გამოიტანს "Hello"

int[] arr1 = { 1, 2, 3 }; // arr1 მიუთითებს მასივზე {1, 2, 3}
int[] arr2 = arr1;     // arr2 მიუთითებს იმავე მისამართზე

arr2[0] = 10;          // ცვლილება arr2-ით

Console.WriteLine(arr1[0]); // გამოიტანს 10, ცვლილება ჩანს arr1-შიც
// მაგალითი Java-ში
String s1 = "Hello"; // s1 მიუთითებს "Hello" სტრინგზე
String s2 = s1;      // s2 მიუთითებს იმავე მისამართზე, რაც s1-ს

// სტრინგები Java-ში იმუტაბლია.
// ცვლილებისას, ახალი სტრინგი იქმნება და მისამართი გადამისამართდება.
s1 = "World"; 

System.out.println(s2); // გამოიტანს "Hello"

int[] arr1 = { 1, 2, 3 }; // arr1 მიუთითებს მასივზე {1, 2, 3}
int[] arr2 = arr1;     // arr2 მიუთითებს იმავე მისამართზე

arr2[0] = 10;          // ცვლილება arr2-ით

System.out.println(arr1[0]); // გამოიტანს 10, ცვლილება ჩანს arr1-შიც