Introduktion til pointer i C #

Pegere er defineret som en variabel, der indeholder hukommelsesadressen til en anden variabel. Pegere i C # bruges, når der er en erklæring, der er utrygg og markeret med usikkert nøgleord. Disse typer udsagn kontrollerer ikke affaldssamlere og bruger markørvariabler.

Syntaks: Pegere kan erklæres som

type *var name;
int* a;

Her * kaldes en de-reference operator og a er den variabel, der indeholder adressen på 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 eksemplerne, der viser, hvordan det fungerer i C #.

Pegere 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();
)
)
)

Der er forskellige måder at udføre udsagn på som usikre som en modifikator, konstruktør osv. I ovenstående eksempel er en gruppe udsagn markeret som usikre. I ovenstående kode er der to variabler a og b med værdierne henholdsvis 40 og 20, og pegepinde indeholder deres adresser. Console.WriteLine () bruges til at vise værdier og adresser på variablerne.

Produktion:

Pegere 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 ovenstående eksempel bruges usikker med metoden, der har to variabler a og b med henholdsvis værdierne 50 og 20. Pegere * ptr1 og * ptr2 peger på deres hukommelsesadresser.

Produktion:

Pegere 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 ovenstående kode defineres en matrix, der består af fem elementer, og Console.WriteLine () bruges til at vise værdien af ​​arrayelementer og adressen til arrayelementerne. Der er et begreb i C #, der er kendt som Fastgørelse af et objekt. I ovenstående kode bruges en fast erklæring til fastgørelse af objekt, så affaldsopsamleren ikke lader genstanden bevæge sig og "fastgøre" den. Det kan påvirke runtime-effektiviteten.

Produktion:

Pegere 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 ovenstående eksempel strukturerer medarbejder medarbejdernes medarbejder-id og løn og parameteriserer konstruktøren for at initialisere værdierne. Pegere peger på strukturer, der indeholder primitiv værditype i stedet for strukturer, der indeholder referencetype. I hovedmetoden er der to medarbejdervariabler og medarbejderpoint, der initialiseres med adresserne E1 og E2. Console.WriteLine () bruges til at vise medarbejderens detaljer ved hjælp af pegere.

Produktion:

Pegere 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 ovenstående kode bruges nøgleordet stackalloc, hvor hukommelsen tildeles på stakken. Hukommelsen, der udføres på stakblokken, oprettes under metodeudførelsen. stackalloc er bedre i ydelsen, og der er ikke behov for at fastgøre arrayet. Det er bedre end den heap-allokerede matrix, da der ikke er behov for at frigøre den, fordi den automatisk frigøres, når metoden vender tilbage.

Produktion:

I pegepunkter er konverteringer af en implicit og eksplicit type. En implicit type konvertering er som enhver pointertype til tomrum * og null til enhver pointertype. I eksplicit type er konverteringer fra byte, sbyte, ushort, kort, uint, int, ulong, lang til enhver pointertype eller vice versa og en markør til en anden pointer.

Konklusion - Henvisninger i C #

Så bruges pegere til at pege hukommelsesadresserne og udføre dem med en usikker udsagnskode. Det bruges kun i et ikke-administreret miljø og spores ikke af affaldsopsamleren. Pegere bruges i en stak, kø osv.

Anbefalede artikler

Dette er en guide til Pointers i C #. Her diskuterer vi Introduktion, og hvordan fungerer markøren i C # sammen med forskellige eksempler. Du kan også se på de følgende artikler for at lære mere-

  1. Anvendelser af C #
  2. Pegere i C ++
  3. C # vs Java-ydeevne
  4. Hvad er C?

Kategori: