Вступ до покажчиків на C #

Покажчики визначаються як змінна, яка містить адресу пам'яті іншої змінної. Покажчики на C # використовуються, коли є твердження, яке не є безпечним і позначене небезпечним ключовим словом. Ці типи заяв не контролюють збирачів сміття та використовують змінні вказівники.

Синтаксис: Покажчики можуть бути оголошені як

type *var name;
int* a;

Тут * називається оператором посилання, а a - змінною, яка містить адресу типу int.

Приклад

int *p = & x; // where &x is the memory address of x
Console.WriteLine((int)p) // displaying memory address
Console.WriteLine(*p) // displaying value at memory address

Як працюють покажчики в C #?

Нижче наведено приклади, які показують, як це працює в C #.

Покажчики в C # - Приклад №1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Pointers
(
class Demo
(
public void Method()
(
unsafe
(
int a = 40;
int b = 20;
int* ptr1 = &a;
int* ptr2 = &b;
Console.WriteLine(*ptr1); // displaying the value
Console.WriteLine(*ptr2); // displaying the value
Console.WriteLine((int)ptr1); // displaying the address
Console.WriteLine((int)ptr2); // displaying the address
)
)
)
class Example
(
// main method
public static void Main()
(
Demo d = new Demo();
d.Method();
)
)
)

Існують різні способи виконання операторів як небезпечних, таких як Модифікатор, конструктор тощо. У наведеному вище прикладі група операторів позначена як небезпечна. У наведеному вище коді є дві змінні a і b зі значеннями 40 і 20 відповідно, вказівники містять їх адреси. Console.WriteLine () використовується для відображення значень та адрес змінних.

Вихід:

Покажчики в C # - Приклад №2

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Pointers
(
class Demo
(
public unsafe void Method()
(
int a = 50;
int b = 20;
int* ptr1 = &a;
int* ptr2 = &b;
Console.WriteLine(*ptr1); // displaying the value
Console.WriteLine(*ptr2); // displaying the value
Console.WriteLine((int)ptr1); // displaying the address
Console.WriteLine((int)ptr2); // displaying the address
)
)
class Example
(
// main method
public static void Main()
(
Demo d = new Demo();
d.Method();
)
)
)

У наведеному вище прикладі небезпечно застосовувати метод, який має дві змінні a і b зі значеннями 50 і 20 відповідно. Покажчики * ptr1 і * ptr2 вказують на їх адреси пам'яті.

Вихід:

Покажчики в C # - Приклад №3

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Pointers
(
class Demo
(
public unsafe static void Main()
(
int() array = ( 10, 20, 30, 40, 50 ); // declaring array
fixed (int* ptr = array) // fixed for pinning the object
/* let us have array address in pointer */
for (int i = 0; i < 5; i++)
(
Console.WriteLine("Value of array((0))=(1)", i, *(ptr + i));
Console.WriteLine("Address of array((0))=(1)", i, (int)(ptr + i));
Console.ReadKey();
)
)
)
)

У наведеному вище коді визначається масив, який складається з п'яти елементів, а Console.WriteLine () використовується для відображення значення елементів масиву та адреси елементів масиву. В C # є концепція, яка відома як Закріплення об'єкта. У наведеному вище коді фіксований вислів використовується для закріплення об'єкта, щоб збирач сміття не давав об'єкту переміщатися та «закріплювати» його. Це може вплинути на ефективність виконання.

Вихід:

Покажчики в C # - Приклад №4

using System;
namespace Pointers
(
// Struct employee
struct Employee
(
// members
// employee id and salary
public int empid;
public double salary;
// Constructor to initialize values
public Employee(int e, double s)
(
empid = e;
salary = s;
)
); // end of struct
class Program
(
// Main Method
static void Main(string() args)
(
// unsafe so as to use pointers
unsafe
(
// Declaring two employee Variables
Employee E1 = new Employee(798, 30000);
Employee E2 = new Employee(799, 31000);
// Declaring two employee pointers
// and initializing them with addresses
// of E1 and E2
Employee* E1_ptr = &E1;
Employee* E2_ptr = &E2;
// Displaying details of employees using pointers
// Using the arrow ( -> ) operator
Console.WriteLine("Details of Employee 1");
Console.WriteLine("Employee Id: (0) Salary: (1)",
E1_ptr->empid, E1_ptr->salary);
Console.WriteLine("Details of Employee 2");
Console.WriteLine("Employee Id: (0) Salary: (1)",
E2_ptr->empid, E2_ptr->salary);
) // end unsafe
) // end main
) // end class
)

У наведеному вище прикладі структура співробітників з ідентифікаційними особами та зарплатою членів та параметризує конструктор для ініціалізації значень. Покажчики вказують на структури, які містять примітивний тип значення, а не структури, що містять тип посилання. В основному методі є дві змінні працівники та покажчики на співробітників, які ініціалізуються з адресами E1 та E2. Console.WriteLine () використовується для відображення деталей працівника за допомогою покажчиків.

Вихід:

Покажчики в C # - Приклад №5

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Pointers
(
class Demo
(
public static void Main()
(
unsafe
(
int* arr = stackalloc int(6); // declaring array
arr(0) = 10;
arr(1) = 20;
arr(2) = 30;
arr(3) = 40;
arr(4) = 50;
arr(5) = 60;
for (int i = 0; i < 6; i++)
(
Console.WriteLine($"Value at (i): (arr(i))");
Console.ReadKey();
)
)
)
)
)

У наведеному вище коді використовується ключове слово stackalloc, в якому пам'ять виділяється на стек. Пам'ять, виконана на блоці стека, створюється під час виконання методу. stackalloc кращий по продуктивності і не потрібно закріплювати масив. Це краще, ніж виділений з масиву масив, оскільки немає необхідності звільняти його, оскільки він автоматично звільняється, коли метод повертається.

Вихід:

У покажчиках перетворення мають неявний та явний тип. Неявний тип перетворення схожий на будь-який тип вказівника на тип void * та null на будь-який тип вказівника. У явному типі перетворення відбуваються від байта, sbyte, ushort, short, uint, int, ulong, long до будь-якого типу вказівника або навпаки та одного вказівника до іншого вказівника.

Висновок - Покажчики в C #

Таким чином, покажчики використовуються для вказівки адрес пам'яті та виконання їх з небезпечним кодом операторів. Він використовується лише в некерованому середовищі і не відстежується сміттєзбірником. Покажчики використовуються в стеку, черзі тощо.

Рекомендовані статті

Це посібник із покажчиків на C #. Тут ми обговорюємо Вступ та як працює покажчик на C # разом з різними прикладами. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Використання C #
  2. Покажчики на C ++
  3. C # проти продуктивності Java
  4. Що таке С?