Úvod do ukazatelů v C #

Ukazatele jsou definovány jako proměnná, která obsahuje adresu paměti jiné proměnné. Ukazatele v C # se používají vždy, když existuje příkaz, který je nebezpečný a je označen nebezpečným klíčovým slovem. Tyto typy příkazů nemají kontrolu nad sběrateli odpadu a používají proměnné ukazatele.

Syntaxe: Ukazatele lze deklarovat jako

type *var name;
int* a;

Zde * se nazývá de-referenční operátor a a je proměnná, která obsahuje adresu typu int.

Příklad

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

Jak funguje ukazatel v C #?

Níže jsou uvedeny příklady, které ukazují, jak to funguje v C #.

Ukazatele v C # - Příklad č. 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();
)
)
)

Existují různé způsoby, jak provádět příkazy jako nebezpečné jako modifikátor, konstruktor atd. Ve výše uvedeném příkladu je skupina příkazů označena jako nebezpečná. Ve výše uvedeném kódu jsou dvě proměnné aab s hodnotami 40 a 20 a ukazatele obsahují jejich adresy. Console.WriteLine () se používá k zobrazení hodnot a adres proměnných.

Výstup:

Ukazatele v C # - Příklad č. 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();
)
)
)

Ve výše uvedeném příkladu je nebezpečný použit s metodou, která má dvě proměnné aab s hodnotami 50 a 20. Ukazatele * ptr1 a * ptr2 ukazují na jejich paměťové adresy.

Výstup:

Ukazatele v C # - Příklad # 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();
)
)
)
)

Ve výše uvedeném kódu je definováno pole, které se skládá z pěti prvků a Console.WriteLine () se používá k zobrazení hodnoty prvků pole a adresy prvků pole. V C # je koncept, který je známý jako připnutí objektu. Ve výše uvedeném kódu se pro připnutí objektu používá fixní příkaz, takže sběratel odpadu nedovolí, aby se objekt pohyboval, a „ho“ připnul. Může to ovlivnit účinnost běhového modulu.

Výstup:

Ukazatele v C # - Příklad č. 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
)

Ve výše uvedeném příkladu strukturujte zaměstnance s členy ID zaměstnance a plat a parametrizujte konstruktora k inicializaci hodnot. Ukazatele ukazují na struktury, které obsahují typ primitivní hodnoty namísto struktur obsahujících referenční typ. V hlavní metodě existují dvě zaměstnanecké proměnné a zaměstnanecké ukazatele, které jsou inicializovány adresami E1 a E2. Console.WriteLine () se používá k zobrazení podrobností zaměstnance pomocí ukazatelů.

Výstup:

Ukazatele v C # - Příklad č. 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();
)
)
)
)
)

Ve výše uvedeném kódu se používá klíčové slovo stackalloc, ve kterém je na zásobníku přidělena paměť. Během provádění metody se vytvoří paměť prováděná v bloku zásobníku. stackalloc má lepší výkon a není třeba pole připínat. Je to lepší než pole přidělené haldy, protože není nutné jej uvolňovat, protože se automaticky uvolní, když se metoda vrátí.

Výstup:

U ukazatelů jsou převody implicitní a explicitní typ. Implicitní typ převodu je jako jakýkoli typ ukazatele na neplatný * typ a null na jakýkoli typ ukazatele. V explicitním typu jsou převody z bajtů, sbyte, ushortů, krátkých, uintů, int, ulongů, dlouhých na jakýkoli typ ukazatele nebo naopak a jednoho ukazatele na jiný ukazatel.

Závěr - Ukazatele v C #

Ukazatele se tedy používají k nasměrování adres paměti a jejich spuštění s nebezpečným kódem příkazů. Používá se pouze v nespravovaném prostředí a není sledován sběratelem odpadu. Ukazatele se používají v zásobníku, frontě atd.

Doporučené články

Toto je průvodce ukazateli v C #. Zde diskutujeme Úvod a jak pracuje ukazatel v C # spolu s různými příklady. Další informace naleznete také v následujících článcích

  1. Použití C #
  2. Ukazatele v C ++
  3. C # vs Java Performance
  4. Co je C?

Kategorie: