Introduksjon til pekere i C #

Pekere er definert som en variabel som inneholder minneadressen til en annen variabel. Pekere i C # brukes når det er en uttalelse som er utrygg og er merket av usikre nøkkelord. Disse typer uttalelser har ikke kontroll over søppelsamlerne og bruker pekervariabler.

Syntaks: Pekere kan deklareres som

type *var name;
int* a;

Her * kalles en de-reference operator og a er variabelen som inneholder adressen til type int.

Eksempel

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

Hvordan fungerer Pointers i C #?

Nedenfor er eksemplene som viser hvordan det fungerer i C #.

Pekere i C # - Eksempel # 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();
)
)
)

Det er forskjellige måter å utføre utsagn som utrygge som en modifiserer, konstruktør, etc. I eksemplet ovenfor er en gruppe utsagn merket som utrygg. I koden ovenfor er det to variabler a og b med verdiene 40 og 20 og pekere inneholder adressene deres. Console.WriteLine () brukes til å vise verdiene og adressene til variablene.

Produksjon:

Pekere i C # - Eksempel # 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();
)
)
)

I eksemplet over blir usikker brukt med metoden som har to variabler a og b med verdiene 50 og 20. Pekere * ptr1 og * ptr2 peker på minneadressene.

Produksjon:

Pekere i C # - Eksempel # 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();
)
)
)
)

I koden over defineres en matrise som består av fem elementer og Console.WriteLine () brukes til å vise verdien av arrayelementer og adressen til arrayelementene. Det er et konsept i C # som er kjent som Pinning of a object. I koden over brukes en fast uttalelse til festing av gjenstander slik at søppelsamleren ikke lar objektet bevege seg og “feste” det. Det kan påvirke kjøretidseffektiviteten.

Produksjon:

Pekere i C # - Eksempel # 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
)

I eksemplet ovenfor strukturerer medarbeider medarbeider-ID og lønn og parameteriserer konstruktøren for å initialisere verdiene. Pekere peker på strukturer som inneholder primitiv verditype i stedet for strukturer som inneholder referansetype. I hovedmetode er det to ansattvariabler og ansattpekere som er initialisert med adressene E1 og E2. Console.WriteLine () brukes til å vise detaljene til den ansatte ved hjelp av pekere.

Produksjon:

Pekere i C # - Eksempel # 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();
)
)
)
)
)

I koden over brukes stackalloc-nøkkelordet, der minnet blir tildelt på bunken. Minnet som blir utført på blokken av stabelen opprettes under utførelsen av metoden. stackalloc er bedre når det gjelder ytelse, og det er ikke nødvendig å knytte matrisen. Det er bedre enn den bunke-tildelte matrisen da det ikke er behov for å frigjøre den fordi den automatisk frigjøres når metoden kommer tilbake.

Produksjon:

I pekere er konverteringer av en implisitt og eksplisitt type. En implisitt type konvertering er som enhver pekertype til ugyldig * -type og null til hvilken som helst pekertype. I eksplisitt type er konverteringer fra byte, sbyte, ushort, kort, uint, int, ulong, lang til hvilken som helst pekertype eller omvendt og en peker til en annen peker.

Konklusjon - Pekere i C #

Så pekere brukes til å peke minneadressene og utføre dem med en usikker uttalelseskode. Den brukes bare i et ikke-administrert miljø og spores ikke av søppelsamleren. Pekere brukes i en stabel, kø osv.

Anbefalte artikler

Dette er en guide til Pointers i C #. Her diskuterer vi Introduksjon og hvordan fungerer pekeren i C # sammen med forskjellige eksempler. Du kan også se på følgende artikler for å lære mer-

  1. Bruk av C #
  2. Pekere i C ++
  3. C # vs Java-ytelse
  4. Hva er C?