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

C# - 3. lekceC# - 3. lekce

 

C# - 3. lekce

Google       Google       17. 8. 2005       42 373×

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 Kontrolujete pracovní emaily i na dovolené? 7 tipů odborníka, jak nepřijít o data

Kontrolujete pracovní emaily i na dovolené? 7 tipů odborníka, jak nepřijít o data

Letní měsíce jsou pro většinu zaměstnanců spojené s každoroční dovolenou. Z údajů Českého statistického úřadu vyplývá, že v roce 2017 podnikli Češi přes 13 milionů delších cest (tzn. s více než čtyřmi noclehy). Přitom právě na období července, srpna a září připadá více než 7,5 milionů z nich. Nicméně tradiční představu o dovolené jako o čase, kdy má práci na starost někdo jiný, Češi boří. 

Reklama
Reklama
Obrázek ke článku 10 SEO mýtů, které už nemusíte v roce 2018 řešit

10 SEO mýtů, které už nemusíte v roce 2018 řešit

„Kolik má být na stránce klíčových slov?“, „Nemáš vyplněný meta tag keywords, to nebude fungovat.“, „Katalogy jsou mrtvý“. Také jste už slyšeli některé z těchto otázek? Pojďme si na ně konečně jednou provždy odpovědět.

Obrázek ke článku Trend Micro pomohlo usvědčit viníky v mezinárodním případu Scan4You

Trend Micro pomohlo usvědčit viníky v mezinárodním případu Scan4You

Společnost Trend Micro Incorporated, globální lídr v oblasti kybernetické bezpečnosti, oznámila podrobnosti o své úzké spolupráci s FBI v případu Scan4You. Trend Micro se podílelo na identifikaci osob, které byly spojeny se službou Scan4You Counter Antivirus, což vedlo k jejich odsouzení.

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