C# - 3. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C# - 3. lekceC# - 3. lekce

 
Hledat
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Pergoly a střechy Brno

C# - 3. lekce

Google       Google       17. 8. 2005       44 315×

Tuto lekci berte jako nahlédnutí do světa ukazatelů...

Reklama
Reklama

Ukazatele

Pokud to s ukazateli myslíte vážně, raději šáhněte po něčem komplexnějším, protože tady se jede podle pravidla: "Dvakrát měř - jednou řeš". Naštěstí, ukazatele nepotřebujete do doby, než vás začne zajímat, zda by vaše aplikace nemohla jet rychleji, takže pro běžnou práci nejsou zapotřebí.

Zápis ukazatelů

Ukazatele jsou proměnnými, které uchovávají paměťovou adresu jiného typu. V C# mohou uchovávat jen paměťové adresy hodnotových typů. Deklarace ukazatelů:


int *p;

nebo


int* p;
Je jedno, čemu je symbol "*" blíže, funguje to naprosto stejně. Tato deklarace nastaví ukazatel p na počátek paměťové adresy nějakého celého čísla.

Kombinace *p se užívá k odkazu na místo v paměti, které je obsazeno p. Proto je dán její deklarací. *p může pro celá čísla vypadat následně:


*p = 5;

Tento kus kódu převede hodnotu 5 do celých čísel (integer), dle nastavení v deklaraci. Je nutné si to neplést s případem, kdy se o ukazatel nejedná:


p = 5;

Efektem je změna paměťového místa drženého p. Nikoliv změna hodnoty celého čísla nastaveného původně v deklaraci. Ve skutečnosti p ukazuje na začátek 4 bytů (rozsah typu integer) představujících v paměti umístění 5.

Další důležitý prvek pro práci s ukazateli je operátor &, který v tomto kontextu vrátí adresu proměnné, před kterou je. Příklad nastaví p, aby ukazovalo na umístění i v paměti.


int i = 5;
int *p;
p = &i;

po přidání


*p = 10;

se hodnota i změní na 10, protože i a p ukazují na to samé místo v paměti.

Dále se ukazatelé dají použít pro struktury, ukázka:


Coords x = new Coords();
Coords *y = &x;

Poté můžete pomocí ukazatele y přistupovat k nějakému veřejnému poli ze struktury x, řekněme k z, to je možné provést buď tak


(*y).z

nebo tak


y -> z.

Unsafe code (nebezpečný kód)

Jen v tomto režimu lze používat ukazatele, většinou je nutné upozornit na to, že se to chystáte použít v kompilátoru, jinak vám nahlásí chybu (v Sharpdevelopu je to v nastaveních Project Options). V tomto režimu nefunguje automatická správa paměti (garbage collection), takže to, co napácháte, byste po sobě měli i uklidit. Ukázka programu s pointery (ukazateli):


using System;
public struct Coords
{
  int x;
  int y;
  unsafe public static void Main()
  {
    Coords c = new Coords();
    Coords *p = &c;
      {
        p->y = 6;
        (*p).x = 5;
      }
    Console.WriteLine(c.y);
    Console.WriteLine(c.x);
  }
}

Tady je struktura Coords deklarována uvnitř nebezpečného kódu, ale kdyby byla deklarována mimo něj, ukazatel by musel být ve struktuře fixed, ale toto není téma na malý tutoriál, ale spíše na nějakou delší kapitolu v knize a pokud umíte anglicky nebo japonsky :), můžete spoustu informací najít v MSDN. Dostanete se do ní ze stránek Microsoftu.

Ukazatele, metody a pole

Ačkoliv jsme si řekli, že ukazatele mohou sloužit jen hodnotovým typům, výjimkou jsou pole, zde je ukázka deklarace:


int[] a = {4, 5};
int *b = a;

A jak to pracuje? To si tak ukazatel b ukazuje na první typ obsazený polem a, tento typ musí být opět hodnotový. Kód níže ukazuje, že je možné procházet pole pomocí ukazatelů:


using System;
public class Tester
{
  public static void Main()
  {
    int[] a = {4, 5};
    changeVal(a);
    Console.WriteLine(a[0]);
    Console.WriteLine(a[1]);
  }
  
  public unsafe static void changeVal(int[] a)
  {
    fixed (int *b = a)
    {
      *b = 5;
      *(b + 1) = 7;
    }
  }
}

A jsme u konce. Tento tutoriál je spíše informativní než naučný, vychází to také z toho, že když nechcete, tak na ukazatele nemusíte vůbec sahat. A pokud po nich zatoužíte, není problém je použít. S ukazateli se v tomto seriálu už s největší pravděpodobností nesetkáte a raději se vrhneme na něco jednoduššího, takže příště zase trošku té normální syntaxe.

Zdroj: http://www.softsteel.co.uk/tutorials/cSharp/lesson5.html

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v C#.

Nové články

Obrázek ke článku Konference: Moderní informační systémy podporují automatizaci

Konference: Moderní informační systémy podporují automatizaci

Současná situace v šíření onemocnění Covid-19 klade na řadu firem nové nároky a mnohé z nich jsou nyní více než kdy jindy závislé na nejmodernějších informačních technologiích. Proto i v oblasti podnikových informačních systémů vidíme rostoucí důraz na automatizaci nebo na důslednou integraci. Také o těchto trendech se bude mluvit na konferenci Firemní informační systémy, která se koná 24.9.2020 v pražském Kongresovém centru Vavruška na Karlově náměstí.

Reklama
Reklama
Obrázek ke článku Nebezpečí ukrytá v USB: z nuly na škvarek za pět sekund

Nebezpečí ukrytá v USB: z nuly na škvarek za pět sekund

Za cenu šesti dolarů lze celkem bez obtíží koupit nový, líbivě vyhlížející flash disk. Přidaná hodnota, které se vám spolu s ním dostane, už tak moc líbivá není. To, co se před pár sekundami tvářilo jako externí disk, se po připojení k počítači změní v důmyslné elektrické křeslo, které vaše zařízení v onen příslovečný škvarek promění za pár sekund. Cílovou skupinou pro koupi takových zařízení by mohli být záškodníci, kteří by tímto způsobem osnovali pomstu třeba vůči záletnému partnerovi. 

Obrázek ke článku Znalosti, dovednosti i prestižní titul MBA: Jde to i moderně a online

Znalosti, dovednosti i prestižní titul MBA: Jde to i moderně a online

Snad nikdy není špatná příležitost na investici do hodnotného vzdělání. Obzvlášť v případě, že absolvent dovede teoretické poznatky přetavit v praktické dovednosti, využitelné při řešení problémů i v komunikaci. Právě na to se specializuje studijní program MBA Řízení informačních technologií, vyučovaný na Business Institutu.

Obrázek ke článku Coding Bootcamp Praha: Obor IT krize nepoznamenala, žádaní jsou weboví vývojáři

Coding Bootcamp Praha: Obor IT krize nepoznamenala, žádaní jsou weboví vývojáři

Pandemie Covid-19 otřásla trhem práce v základech. Dopady krize pocítilo celkově až 45 % zaměstnanců. Není divu, že čím dál větší jistotu přináší obor IT. Ten zůstal krizí téměř nepoznamenán a při nutnosti začít dělat věci na dálku se ještě více ukázalo, jak moc mnohé firmy kvalitní IT potřebují. Do IT nyní přicházejí začátečníci, kteří v něm vidí lukrativní budoucnost a jistotu, ale i freelanceři a zaměstnanci z oborů zasažených krizí

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý