Увод у Показе у Ц #

Показивачи су дефинисани као променљива која садржи меморијску адресу друге променљиве. Показивачи у Ц # користе се кад год постоји изјава која није сигурна и обележена је несигурном кључном речју. Те врсте изјава не контролишу сакупљаче смећа и користе показивачке варијабле.

Синтакса: Показивачи се могу декларирати као

type *var name;
int* a;

Овде се * зове де-референтни оператор и а је променљива која садржи адресу типа инт.

Пример

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

Како Поинтерс раде у Ц #?

Испод су примери који показују како то функционише у Ц #.

Показивачи у Ц # - Пример 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();
)
)
)

Постоје различити начини извршења изјава као небезбедне попут Модификатора, конструктора итд. У горњем примеру, група изјава је означена као несигурна. У горњем коду постоје две променљиве а и б са вредностима 40 односно 20, а показивачи садрже њихове адресе. Цонсоле.ВритеЛине () користи се за приказ вредности и адреса променљивих.

Излаз:

Показивачи у Ц # - Пример # 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();
)
)
)

У горњем примјеру, несигурно се користи методом која има двије варијабле а и б са вриједностима 50 и 20. Показивачи * птр1 и * птр2 упућују на њихове меморијске адресе.

Излаз:

Показивачи у Ц # - Пример # 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();
)
)
)
)

У горњем коду је дефинисан низ који се састоји од пет елемената, а Цонсоле.ВритеЛине () користи се за приказ вредности елемената поља и адресе елемената поља. У Ц # постоји концепт који је познат као Приквачивање објекта. У горе наведеном коду, фиксна изјава користи се за приквачивање предмета тако да сакупљач смећа не дозвољава објекту да се помера и „притишће“. То може утицати на ефикасност извршавања.

Излаз:

Показивачи у Ц # - Пример # 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
)

У горњем примјеру, структура запосленика с члановима запосленог ид и плаћом те конструира параметрирање конструктора за иницијализацију вриједности. Показивачи указују на структуре које садрже примитивни тип вредности уместо на структуре које садрже референтни тип. У главној методи постоје две променљиве запосленика и показивачи запосленика који се иницијализирају са адресама Е1 и Е2. Цонсоле.ВритеЛине () користи се за приказ детаља о запосленом помоћу показивача.

Излаз:

Показивачи у Ц # - Пример # 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();
)
)
)
)
)

У горњем коду користи се кључна реч стацкаллоц, у којој је меморија додељена на снопу. Меморија извршена на блоку снопа ствара се током извођења методе. Стацкаллоц је бољи у перформансама и нема потребе за фиксирањем низа. Бољи је од скупа додељеног хеапом, јер нема потребе да се ослободи јер се аутоматски ослобађа када се метода врати.

Излаз:

У показатељима конверзије су имплицитног и експлицитног типа. Имплицитни тип претворбе је попут било којег типа показивача на неважећи * тип и нулл за било који тип показивача. У експлицитном типу, конверзије су од бајта, сбитеа, усхорт-а, кратког, уинт, инт, улонг, лонг у било који тип показивача или обрнуто и једног показивача на други поинтер.

Закључак - Показивачи у Ц #

Тако се показивачи користе за усмеравање меморијских адреса и извршавање их са несигурним кодом изјава. Користи се само у неуредном окружењу и не прати га сакупљач смећа. Показивачи се користе у хрпи, реду чекања итд.

Препоручени чланци

Ово је водич за Показе у Ц #. Овде смо расправљали о Уводу и како ради показивач на Ц # заједно са разним примерима. Такође можете погледати следеће чланке да бисте сазнали више -

  1. Употребе Ц #
  2. Показивачи у Ц ++
  3. Ц # вс Јава Перформанце
  4. Шта је Ц?

Категорија: