A nem biztonságos
A könyv célja, hogy egy széles körű iránt érdeklődő olvasók programozás C # .Vvedite rövid összefoglalót itt
Könyv: C # 4.0: Átfogó útmutató
A nem biztonságos
Szakaszok ezen az oldalon:
C # hagyjuk levelet úgynevezett „nem biztonságos” kódot. Ebben a furcsa első ránézésre, az engedélyezést nem igazán semmi szokatlan. Biztonságosnak tekintett nem rosszul megírt kód, és a kód, amely nem lehet teljesen alá a Common Language Runtime (CLR). Amint az 1. fejezetben, az eredmény a programozás C # jellemzően menedzselt kód. Mindazonáltal ez a nyelv lehetővé teszi, hogy írjon kódot nem kerül végrehajtásra teljes ellenőrzése alatt a CLR. Ez menedzselt kód nem ugyanazok a kezelőszervek és korlátozások menedzselt kód, és ez az úgynevezett biztonságos, mert semmilyen módon nem látni, ha végrehajtja a veszélyes műveletet. Következésképpen, a kifejezés nem biztosított, nem jelenti azt, hogy a kód rejlő hibákat. Ez egyszerűen azt jelenti, hogy a kód műveletet tud végrehajtani, amelyek nem tartoznak a felügyelet, ellenőrzött környezetben.
A nyelv C # mutatók bejelentett és használt azonos módon, mint a C / C ++. Ha tudod, hogyan kell használni őket a C / C ++, akkor nem lesz nehéz, hogy ezt a C #. De ne felejtsük el, hogy a fő célja a C # - hozzanak létre egy felügyelt kódot. És képes ennek programozási nyelv támogatása menedzselt kódot kell használni, hogy megoldja egy adott típusú probléma. Ez az inkább kivétel, mint a szabály a programozás C #. Lényegében összeállításához menedzselt kódot kell használni fordító opció / biztonságos.
A mutatók alapján biztonságos kódot, így kezdi venni belőle velük.
Bázisok használja mutatók
Hivatkozva egy konkrét példát. Annak érdekében, hogy a változó ip mutató egy int. meg kell állapítsa meg az alábbiak szerint.
A float típusú mutató nyilvánították az alábbiak szerint.
Az adatok típusa, amely jelzi a mutató is, attól függ, hogy milyen típusú a megfelelő. Ezért, a fenti változó ip példák szolgálhat, hogy jelezze a típusú érték int. és a változó fp - jelzi a float értéket. Meg kell azonban szem előtt tartani, hogy semmi sem akadályozza a mutató mutat sehova. Ezért jelei potenciálisan veszélyes.
Ez a fő különbség, hogy tartsa szem előtt, amikor számhordozás C / C ++ kódot a C #.
Az üzemeltetők * és jelek
* Az üzemeltető is használhatja a bal oldali értékadó operátor. Ebben az esetben, ez határozza meg az értéket mutatott egy megfelelő mutató, mint az alábbi példa.
A kulcsszó használatával nem biztonságos
Bármilyen kód, amely a mutatók, meg kell jelölni a nem biztonságos egy speciális kulcsszó biztonságos. Hasonlóképpen, az egyik megjelölheti az adott típusú adatok (például osztályok és struktúrák), az osztály tagjai (beleértve a módszereket és a szolgáltatók) vagy egyedi kód blokkok, mint a nem biztonságos. Például, az alábbiakban egy olyan program, ahol a pointerek használják a módszert a Main (). jelöléssel nem biztonságos.
Ez a program a következő eredményt adja.
A kezdeti értéke a változó száma: 99
Az új érték a változó száma: 10
Használata módosító rögzített
A dolgozó mutatókat gyakran fix módosítót. amely megakadályozza a eltávolítása vezérelt változó „szemétgyűjtő” eszközökkel. Annak szükségességét, hogy ez keletkezik, például, ha a mutató utal, hogy a mező egy tárgy egy bizonyos osztály. És mert az index nem tud semmit az intézkedések a „szemétgyűjtő” a rendszer, akkor pont a rossz objektumot, ha az objektum a törölni kívánt. Az alábbiakban az általános formája a rögzített módosítót:
Az alábbiakban egy példát alkalmazva a rögzített módosítót.
Ez az, amit az eredményeket a e program végrehajtását.
A kezdeti értéke a változó o.num: 19
Az új változó értéke o.num: 10
Ebben a példában, a rögzített módosító megakadályozza az eltávolítását a tárgy. És mivel a p változó pont egy példány változó o.num. ez jelzi a hamis memória területet, ha törli az objektumot.
Hozzáférés a tagok a szerkezet segítségével egy mutató
Egy mutató mutathat egy objektum típusú szerkezet, azzal a megkötéssel, hogy a szerkezet nem tartalmaz referencia adattípusok. Ahhoz, hogy a tag szerkezet egy mutató, használja a nyíl operátor (->), és nem a pont operátor (.). Például, a hozzáférést a tagok a szerkezet
az alábbiak szerint.
Pointer számtani
A fentiek szerint lehet összefoglalni: miután a növekmény mutató fog mutatni a memóriaterület, ahol a tárolás következő eleme a megfelelő típusú, és mindegyik után dekrementálás mutató fog mutatni a memóriaterület, ahol a tárolt előző elem megfelelő típust.
Pointer aritmetikai nem korlátozódik a növelő és csökkentő. A jelek, felveheti és elvesz egy egész. Így, miután a számítás a következő kifejezést:
p1 változó fog mutatni a kilencedik eleme a megfelelő típusú kapcsolatosan hozzá az elemet, amelyre mutat abban a pillanatban.
Ha nem tud hozzáadni mutató, akkor megengedett, hogy elvesz egy mutatót egy másik, feltéve, hogy mindkét pointerek azonos típusú megfelelője. Az eredmény egy ilyen művelet lenne a számos eleme a megfelelő típusú, amelyek osztoznak a két mutató.
Mellett összeadás és a kivonás a indexet és kivonva két pointert, más aritmetikai műveleteket mutató nem megengedett. Különösen a jelek nem összeadást vagy tőlük, vagy dupla lebegőpontos szám típusát. Nem engedélyezett a mutató számtani típusú void *.
Az alábbiakban egy példa eredménye a program végrehajtását. Tudod bizonyítani egyébként, bár a rések között a kijelzett érték meg kell egyeznie.
összehasonlítása jelek
Pointerek lehet összehasonlítani relációs operátorok, mint ==. <и>. De ahhoz, hogy az eredmény kiderült, hogy jellemző mutatók összehasonlítása, mindkét mutató kell lennie valamilyen módon kapcsolódnak egymáshoz. Például, ha a változók P1 és P2 mutató két különböző és független változókat, akkor minden az összehasonlítás, mint a szabály, hogy nincs semmi értelme. De ha a változók P1 és P2 jelzik kapcsolódó változók, mint a tömb elemei, az összehasonlítás volna némi érdeme.
Mutatók és tömbök
C #, pointerek és tömbök vannak kötve egymással. Például, meghatározva a tömb neve nélkül index egy nyilatkozatában módosító kialakított fix mutatót az elején a tömb. Példaként tekintsük a következő programot.
Az alábbiakban az eredménye ez a program.
Mint látható a fenti eredményekből, az expressziós
azonosak. De mivel a második forma tömörebb, akkor gyakrabban használják a programozás, amikor szükség van rá az elején a tömb index.
indexelés pointer
Amikor a mutató fordul tömb, akkor indexelt tömbként is. Ez a szintaxis sokkal kényelmesebb bizonyos esetekben alternatívája mutató aritmetika. Tekintsük a következő mintaprogram.
Az alábbiakban az eredménye ez a program.
Amint látható, az eredmény a fent említett programok, az általános kifejezési forma egy mutató
Ez lehet helyettesíteni az alábbi szintaxis tömb indexelési.
Ami az index mutatók, meg kell szem előtt tartani a következő. Először is, ezzel indexelés tömb határain az ellenőrzést nem végeztek. Ezért a mutató utalhat egy elem határain kívül a tömbben. És másodszor, az index nem biztosítja a length tulajdonság. meghatározzuk a hossza a tömb. Ezért, ha a mutató van használva, a hossza a tömb nem ismert előre.
Vonal mutatók és
Végrehajtása után a nyilatkozat módosító fix p változó fog mutatni, hogy az elején egy sor karakter alkotó vonalat. Ez a tömb végződik végén karaktersor, azaz null karaktert. Ezért ezt a tényt fel lehet használni, hogy ellenőrizze a tömb végéhez. C / C ++ vonalak vannak megvalósítva tömbök, végződő új sor, és ennek következtében, kapott típusú char * mutató egy húr, úgy lehet manipulálni ugyanolyan módon, mint a C / C ++.
Az alábbiakban egy olyan program, amely bizonyítja a hozzáférést egy karakterlánc a mutató típus char *.
Ez a program a következő eredményt adja.
Ugyanakkor nem szabad elfelejteni, hogy a változó q egy mutató nem egy egész, és egy mutatót egy int.