Mutasson a c

Az első részben megvizsgáltuk, hogy miként használjuk a mutatót és az új operátort, ha a program fut, a szükséges méret memóriájának egy részét közvetlenül fel lehet osztani. Azt is megtudtuk, hogy a memória ezen területe felszabadítható a törléssel. Megtettük, hogy a paramétereket a mutatóhoz hogyan adják át a függvénynek. És az a tény, hogy ez lehetővé teszi a változók értékének megváltoztatását, amelyek átkerülnek a függvényre.
Most egy olyan példát fogunk megnézni, ahol a mutatókat a karakterláncokra (char-mutatók) mutatjuk be. A függvény egy mutatót visz vissza. A feladat a következő: A vonalaknak két mutatója van, amelyek alatt a szükséges memória területeket hozzárendelik. E két vonalat össze kell kötni. Ez azt jelenti, hogy az első sorra új memóriaterületet kell felosztani, így lehetséges a második sor kitöltése.
egy új elegendő memória elosztása a sorhoz
Rendben megyünk. A 4. sor tartalmazza a funkció prototípust. Feladata az, hogy új vonalat hozzárendel egy olyan vonalhoz, amelynek végén egy másik vonal írható. Ezt az alábbiakban részletezzük, amikor eljutunk a funkció meghatározásába. Lépjen a 11-12 sorokra, amelyek meghatározzák azokat a változókat, amelyek az "1. sor" és a "+ 2. sor" sorainak hosszúságát tárolják. A hossz kiszámítása a beépített strlen () függvény használatával történik. Vissza fog térni a húr hosszát figyelembe vétele nélkül a karakter \ 0. Ezért az inicializálás változók és strSize1 strSize2 hozzávesszük, hogy a visszatérés strlen (...) egységet.

Hozzon létre egy új mutatót, és azonnal hozzárendeljen hozzá egy memóriát, ami elegendő mindkét sor karakterének elhelyezésekor (44. oldal). Ezután másolja az első sor karaktereit a hozzárendelt memóriába: strcpy_s (strInFunc.reqSize.pstr1); A karakterlánc másolásra kerül - fel kell szabadítani a foglalt memóriát, így nincs memória szivárgás (48. oldal). Visszatérés a mutatóból egy új memóriahelyre: return strInFunc;

Ez a példa azt mutatta, hogy a mutatók segítségével a RAM-ot egy bájtban tudjuk kezelni.
Végül összegezzük és jelöljük a legfontosabb dolgot, amelyet meg kell emlékeznünk a mutatókra.
Miért van szükségem mutatókra a C ++-ban?
Nézzünk részletesen egy példára:
A 25. sor egy mutatós elemek adatelemeinek elérését mutatja. Array-jelölést használunk. Vagyis nem kell a dereferencing műveletet használni a tömbadatok eléréséhez:
cout <<"pfirstArr[0] = " < Természetesen elérheti a tömb adatait a pointer-jelöléssel, de ez kényelmetlen. Nézd meg, hogyan néz ki az értékek a tömb elemekhez és megjeleníti az értékeket a képernyőn: A forráskód 27-28-as sorai - a C-string definíciója és egy mutató meghatározása erre a sorra. A mutatók figyelemre méltóan jóak a húrok használatával. Amikor a cout streamben egy karakter tömbre mutatunk egy mutatót, megmutatja nekünk az egész karakterláncot. Ugyanúgy, mint a tömbök esetén, a fordító a karaktereket a képernyőre továbbítja, amíg nem találja a sor végét a \ 0 Nézze meg ismét a program és a forráskód eredményét. Próbálja meg megérteni, hogyan működik.
Egy másik eltérés a témától, hogy felvidítsák azokat, akik erősen kapják a mutatók témáját :) Nem vagy egyedül. Minden a gyakorlatban jön! És ez jön hozzád! Ne pánik, ha túl zavarosnak tűnik számodra. A lehetséges programozási feladatok megoldása. Még akkor is, ha valamit rosszul csinál a kódírás folyamatában, csodálatos fejlesztési környezetünk tudatja velünk.
Mutatók paraméterekként (argumentumok):
Nem értem. a kód 15 sorában - strcpy_s (pStr1, strSize1, "1 sor");
a strcpy_s 3 függvényben, amelyet korábban a függvény leírásában használtunk, csak két argumentumot (ahol másolnunk és másolnunk kell).
Valójában a kérdés. miért vannak 3 érvek ebben? Mert most a mutatót használjuk az első érvként? Vagy azért, mert ez egy új változata ennek a függvénynek (strcpy_s helyett strcpy)? Vagy a vizuális stúdió ezen tulajdonsága? mert a kódot. A blokk funkciók strcpy 2 argumentumot tartalmaz <>.
A kód példa a strcpy_s () függvényt használja, nem strcpy (), amely valójában 2 argumentummal rendelkezik. Nézze meg a neveket.
Ui Ez nem jelenti azt, hogy ezt meg kell tennie: a strcpy_s () egy olyan függvény, amely nem tartozik a POSIX, C, Linux, stb szabványokhoz. és hasonlók. ... és csak Windows operációs rendszerekben használják (a szakirodalomban nem találja meg a leírásait sem). De a konkrét példa helyes.
Csak azt értettem, hogy a strcpy leírások nem találom, de miért nem tudom, hogy ez a függvény milyen mértékben ismeri a húr méretét.
Meg kell tudnod a karakterlánc méretét, mert az első argumentum egy mutató? Vagy a felújított funkció egyik jellemzője? És hány érvelés ezt a funkciót általában elfogadja (megteheti)?
A másolásra váró vonal méretének meghatározása nagyon hasznos: ha a forráskód véletlenül hosszabb, mint a vevőegység, memória hozzáférési hibát kap a teljes alkalmazás összeomlásával.
Tekintse meg a strncpy () könyvtár és a standard függvény leírását, ami biztonságosabb és gyakrabban használatos a professzionális kódnál, mint a strcpy ().