Uvod u Pokaze u C #

Pokazivači su definirani kao varijabla koja sadrži memorijsku adresu druge varijable. Pokazivači u C # koriste se kad god postoji izjava koja nije sigurna i obilježena su nesigurnom ključnom riječi. Te vrste izjava ne upravljaju sakupljačima smeća i koriste pokazivačke varijable.

Sintaksa: Pokazivači se mogu deklarirati kao

type *var name;
int* a;

Ovdje se * naziva de-referentni operator, a a je varijabla koja sadrži adresu tipa int.

Primjer

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

Kako Pointers rade u C #?

Ispod su primjeri koji pokazuju kako to funkcionira u C #.

Pokazivači u C # - Primjer # 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();
)
)
)

Postoje različiti načini izvršenja izjava kao nesigurnih poput Modifikatora, konstruktora itd. U gornjem primjeru skupina izjava označena je kao nesigurna. U gornjem kôdu postoje dvije varijable a i b sa vrijednostima 40 odnosno 20, a pokazivači sadrže njihove adrese. Console.WriteLine () koristi se za prikaz vrijednosti i adresa varijabli.

Izlaz:

Pokazivači u C # - primjer # 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();
)
)
)

U gornjem primjeru, nesigurno se koristi metoda koja ima dvije varijable a i b sa vrijednostima 50 odnosno 20. Pokazivači * ptr1 i * ptr2 upućuju na njihove memorijske adrese.

Izlaz:

Pokazivači u C # - Primjer # 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();
)
)
)
)

U gornjem kôdu definira se niz koji se sastoji od pet elemenata, a Console.WriteLine () koristi se za prikaz vrijednosti elemenata polja i adrese elemenata polja. U C # postoji koncept koji je poznat kao Prikvačivanje objekta. U gornjem kôdu, fiksna izjava koristi se za prikvačivanje predmeta, tako da sakupljač smeća neće dopustiti objektu da se pomiče i „zabiti“. To može utjecati na učinkovitost izvršavanja.

Izlaz:

Pokazivači u C # - Primjer # 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
)

U gornjem primjeru, struktura zaposlenika s članovima zaposlenika id i plaće te parametrizira konstruktora za inicijalizaciju vrijednosti. Pokazivači ukazuju na strukture koje sadrže primitivni tip vrijednosti umjesto strukture koje sadrže referentni tip. U glavnoj metodi postoje dvije varijable zaposlenika i pokazivači zaposlenika koji se inicijaliziraju s adresama E1 i E2. Console.WriteLine () koristi se za prikaz detalja o zaposleniku pomoću pokazivača.

Izlaz:

Pokazivači u C # - Primjer 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();
)
)
)
)
)

U gornjem kôdu koristi se ključna riječ stackalloc, u kojoj je memorija raspoređena na snopu. Tijekom izvođenja metode stvara se memorija izvršena na bloku snopa. stackalloc je bolji u performansama i nema potrebe za prikazivanjem matrice. Bolji je od raspoređene hrpe jer nema potrebe za oslobađanjem jer se automatski oslobađa kad se metoda vrati.

Izlaz:

U pokazateljima pretvorbe su implicitne i eksplicitne vrste. Implicitna vrsta pretvorbe je poput bilo koje vrste pokazivača na neispravni * tip i nula u bilo koju vrstu pokazivača. U eksplicitnom tipu pretvorbe su od bajta, sbytea, ushort, kratkog, uint, int, ulong, long u bilo koju vrstu pokazivača ili obrnuto i jednog pokazivača na drugi pointer.

Zaključak - Pokazi u C #

Tako se pokazatelji koriste za usmjeravanje memorijskih adresa i izvršavanje ih s nesigurnim kodom izjava. Koristi se samo u neurednom okruženju i ne prati ga sakupljač smeća. Pokazivači se koriste u hrpi, redu čekanja itd.

Preporučeni članci

Ovo je vodič za Pokaze u C #. Ovdje smo raspravljali o Uvodu i kako djeluje pokazivač na C # zajedno s raznim primjerima. Možete pogledati i sljedeće članke da biste saznali više -

  1. Upotrebe C #
  2. Pokazivači u C ++
  3. Izvedba C # i Java
  4. Što je C?

Kategorija: