Introduktion till pekare i C #

Pekare definieras som en variabel som innehåller minnesadressen för en annan variabel. Pekare i C # används när det finns ett uttalande som är osäkert och markeras av osäkra nyckelord. Dessa typer av uttalanden kontrollerar inte skräppassarna och använder pekvariabler.

Syntax: Pekare kan förklaras som

type *var name;
int* a;

Här * kallas en av-referensoperatör och a är variabeln som innehåller adressen till typ int.

Exempel

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

Hur fungerar Pekare i C #?

Nedan följer exemplen som visar hur det fungerar i C #.

Pekare i C # - Exempel # 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 finns olika sätt att köra uttalanden som osäkra som en modifierare, konstruktör osv. I exemplet ovan är en grupp uttalanden markerade som osäkra. I koden ovan finns det två variabler a och b med värdena 40 respektive 20 och pekare innehåller deras adresser. Console.WriteLine () används för att visa värdena och adresserna för variablerna.

Produktion:

Pekare i C # - Exempel # 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 exemplet ovan används osäkra med metoden som har två variabler a och b med värdena 50 respektive 20. Pekare * ptr1 och * ptr2 pekar på sina minnesadresser.

Produktion:

Pekare i C # - Exempel # 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 ovanstående kod definieras en matris som består av fem element och Console.WriteLine () används för att visa värdet på arrayelement och adressen till arrayelementen. Det finns ett koncept i C # som kallas Pinning of a object. I koden ovan används ett fast uttalande för att fastna på objektet så att sopor samlaren inte låter objektet flytta och "fästa" det. Det kan påverka effektiviteten för körtiden.

Produktion:

Pekare i C # - Exempel # 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 exemplet ovan strukturerar medarbetaren med medlemmarna anställds ID och lön och parametrar konstruktören för att initialisera värdena. Pekare pekar på strukturer som innehåller primitiv värdetyp istället för strukturer som innehåller referenstyp. I huvudmetoden finns det två medarbetarvariabler och anställdspekare som initialiseras med adresserna E1 och E2. Console.WriteLine () används för att visa information om anställda med hjälp av pekare.

Produktion:

Pekare i C # - Exempel # 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 ovan används stackalloc-nyckelordet, i vilket minnet tilldelas på stacken. Det minne som körs på blockblocket skapas under metodutförandet. stackalloc är bättre i prestanda och det finns inget behov av att fästa matrisen. Det är bättre än den högtilldelade matrisen eftersom det inte finns något behov att frigöra den eftersom den automatiskt frigörs när metoden återgår.

Produktion:

I pekare är konverteringar av en implicit och tydlig typ. En implicit typ av konvertering är som alla pekartyp till tomrum * och null till valfri pekartyp. I uttrycklig typ är omvandlingar från byte, sbyte, ushort, kort, uint, int, ulong, länge till vilken som helst pekartyp eller vice versa och en pekare till en annan pekare.

Slutsats - Pekare i C #

Så pekare används för att peka minnesadresserna och köra dem med en osäker kodkod. Den används endast i en obekväm miljö och spåras inte av avfallssamlaren. Pekare används i en bunt, i kö, etc.

Rekommenderade artiklar

Detta är en guide till Pekare i C #. Här diskuterar vi introduktion och hur fungerar pekaren i C # tillsammans med olika exempel. Du kan också titta på följande artiklar för att lära dig mer-

  1. Användningar av C #
  2. Pekare i C ++
  3. C # vs Java-prestanda
  4. Vad är C?

Kategori: