C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Programovací jazyk C++
Programování 2 Cvičení 5.
Pole, ukazatele a odkazy
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Strukturované datové typy
C++ Přednáška 3 Konstantní a statické členy tříd, ukazatel this, konstantní instance třídy Ing. Jiří Kulhánek , kat. 352, VŠB TU Ostrava 2004.
C# pro začátečníky Mgr. Jaromír Osčádal
Programování v C++ Cvičení.
Algoritmizace a programování
C# - struktury, výčtové typy, pole
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - Registry Windows Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - znakové typy a řetězce
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
C# - číselné datové typy
C# - Databáze úvod, ADO.NET
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Vytvoření řadiče Windows Serveru Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec.
C# - Exceptions (výjimky)
Objektové programování
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - OOP (object oriented programming)
C# - Grafika Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - Úvod Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - prvky UI – vlastnosti a události Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
C# - I/O, streamy, práce se soubory
C# - Testování a ladění aplikací Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
C# - Menus, ToolBars and Dialogs Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
ADO.NET – Transakce Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
C# - Generic Collections Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
ADO.NET – Objekt DataSet (offline scenář) Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Ukazatele BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
Vladimir Vysockij Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T. G. Masaryka, Kostelec nad Orlicí.
STRING A UKAZATELE. Co to je řetězec? Řetězec v Javě je samostatný objekt. Je konstantní, co znamená, že jednou vytvořený řetězec nelze změnit. Chceme-li.
C# - konverze datových typů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
ADO.NET – object Connection Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Microsoft SQL server Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Financování podniku Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
POSLOUPNOST test. ZKUSTE ODPOVĚDĚT Co je to komentář? Poznámky, které nám pomohou pochopit, když se k programu vrátíme po delší době, co jsme chtěli tou,
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Programovací jazyk C# 4. část - cykly.
Jaroslav Kudr pro OATGM
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Programovací jazyk C++
Vzorové řešení zápočtového testu
Programování v jazyce C++
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Oblast platnosti identifikátoru (1)
Práce s procesy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
C# přehled vlastností.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Transkript prezentace:

C# - pointery Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

Co je to pointer ?  Pointer je proměnná, jejíž hodnotou je adresa v paměti  Pointery v C# nemají tak široké využití jako v některých jiných jazycích  Využití pointerů nahrazuje použití referenčních datových typů  Pointery mohou obsahovat pouze adresu proměnné nebo pole hodnotového typu  Pointery nejsou „trasovány“ Garbage collectorem (to je důvod proč nemohou pracovat s referenčními typy)  Funkcionality realizované prostřednictvím pointerů musí být v unsafe módu

K čemu jsou pointery dobré ?  Obecně v C# na rozdíl od jazyka C++, Delphi, … nepotřebujeme pointery – využíváme vlatností referenčních typů  Zvýšení výkonu aplikace  K provázání našeho kódu s již napsanými funkcemi např. API knihovny, které potřebují pointer jako vstupní parametr  Ke kontrole paměti nebo napsání aplikace která kontroluje paměť jiné aplikace

Výhody unsafe kódu  Výkon a flexibilita – nejefektivnější přístup k datům  Adresace paměti – bez použití pointerů nemůžeme kontrolovat kde v paměti se data ukládají  Kompatibilita různých knihoven

Nevýhody unsafe kódu  Složitost  Složitější ladění programů  Všechny rizika související s přímou prací s pamětí (přetečení, snaha o přístup do paměti, která neobsahuje data,…)  Type safety – problémy související s kontrolou typů v.NET

Proměnná ukazatel na int: *p Proměnná : x Deklarace: Int *p; Deklarace a inicializace (bude ukazovat na x): int *ptr1 = &x; Hodnota pointeru: *p Adresa pointeru: p Deklarace: int x; Hodnota x: x=55; Přes pointer: *p=55; Adresa x: Lze ji získat &x

Použití pointerů  static void Main() { int var1 = 5; unsafe //musím před použitím pointerů označit práci v //nechráněném režimu { int * ptr1, ptr2; //definuji dva ukazatele na integer ptr1 = &var1; //ptr1 bude obsahovat adresu proměnné var1 ptr2 = ptr1; //ptr2 bude ukazovat na stejnou proměnnou jako //ptr1 *ptr2 = 20; //měním hodnotu proměnné na kterou ukazuje ptr2, } //tedy hodnotu var1 Console.WriteLine(var1); }

Aritmetika s pointery  Předpokládejte že přidáte 1-ku k pointeru na integer. Překladač předpokládá, že chcete přistoupit v paměti k integeru, který následuje, (integer = 4byty v paměti) tedy k adrese na kterou ukazuje pointer přidá 4byty. Analogicky kdyby pointer ukazoval např. na double přidá kompilátor 8Bytů – velikost datového typu double.

Aritmetika s pointery  uint u = 3; byte b = 8; double d = 12.5; uint *pU = &u; byte *pB = &b; double *pD = &d; Console.WriteLine(„Před operacemi"); Console.WriteLine(„Hodnota pU:" + (uint) pU); Console.WriteLine(„Hodnota pB:" + (uint) pB); Console.WriteLine(„Hodnota pD:" + (uint) pD); pU += 5; pB -= 3; pD++; Console.WriteLine("\nPo operacích"); Console.WriteLine(„Hodnota pU:" + (uint) pU); Console.WriteLine(„Hodnota pB:" + (uint) pB); Console.WriteLine(„Hodnota pD:" + (uint) pD); Výsledek: Před operacemi Hodnota pU: Hodnota pB: Hodnota pD: Po operacích: Hodnota pU: Hodnota pB: Hodnota pD: * 4 = 20, přidáno k pU. 3 * 1 = 3, odebráno od pB. 1 * 8 = 8, přidáno k pD.

Pointery na Struktury a Třídy  Ukazatelé můžeme použít i v případě aby odkazovali na strukturu nebo třídu, pokud ta neobsahuje referenční typy.  Př: struct MyStruct { public long X; public double D; } //Deklarujeme pointer na naši strukturu MyStruct *pMyStruct; //Inicializace proměnné MyStruct myStruct = new MyStruct(); pMyStruct = & myStruct; //Přistupování ke členům proměnné přes ukazatel: (*pMyStruct).X = 18; (*pMyStruct).D = ;

Zjednodušení syntaxe  V předchozím příkladu zapsanou konstrukci (*pMyStruct).X = 18; (*pMyStruct).D = ; lze zjednodušeně zapsat následujícím způsobem pomocí znaků -> takto: pMyStruct->X = 18; pMyStruct->D = ; Pozn.: Ukazatele na třídy které neobsahují referenční typy je možné použít – tato problematika přesahuje rámec probírané látky

Úkol  Vytvořte program, jednu proměnnou typu integer a dva ukazatele na tuto proměnnou. Vyzkoušejte: 1. inicializovat pouze první ukazatel na tuto proměnnou a podívat se na obsah a adresy všech proměnných 2. inicializovat i druhý pointer na proměnnou integer. Změňte hodnotu proměnné integer přes druhý ukazatel a prohlédněte si znovu obsahy a adresy všech proměných.  Vytvořte program, který bude obsahovat strukturu bod se souřadnicemi x,y. Vytvořte pole 5 prvků, které bude obsahovat ukazatele na jednotlivé body. V cyklu nechte uživatele zadat body pole. Vypište pomocí ukazatelů a průchodu polem jednotlivé body na obrazovku.

Závěr  Při práci s pointery musí být programátor opatrný – pracuje v tzv. unsafe módu  Malá chyba může znamenat pád aplikace a může být obtížně naleznutelná  Umožňuje vytvořit efektivnější kód a využít kód druhých stran nebo knihoven, které jejich použití vyžadují  V C# silná podpora referenčních typů jejich použití eliminuje

14 Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Použité materiály: Kniha: Programujeme profesionálně, nakladatelství WROX, autor: Jay Glynn,… Seriály o programování v jazyce C# :