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-შიც