Utalásokkal és vonósok C nyelven
Mutatók és karakterláncok
Egy karakterlánc konstans írja le, mint
egy tömb karakter. Egy belső reprezentációja a tömb végén egy null karakter „\ 0”. amellyel a program megtalálja a sor végére. A több memória sejtek egy több, mint a karakterek száma elhelyezett dupla idézőjelek közé.
A legtöbb esetben a húr állandókat használjuk érvek funkciók, mint például a
Amikor egy ilyen karakterlánc jelenik meg a programban való hozzáférést is egy karakteres mutató; azaz printf kap egy mutatót, hogy az elején egy sor karakter. Pontosabban, a hozzáférést a húr állandó révén mutató az első elemet.
Sztring konstansok nem kell csak paraméterként funkciókat. Ha például pmessage változó nyilvánították
pmessage = „itt az idő”;
tedd bele egy mutatót a karakter tömb, a húr önmagában nem másolható, másolása csak a mutatót is. Műveletek együttműködni a sorban, mint egy egység C nem biztosított.
Van egy fontos különbség a következő fogalmakat:
char AAz üzenet [] = „itt az idő”; / * * Array /
char * pmessage = "itt az idő"; / * * Index /
AAz üzenet - egy tömb, amelynek mérete olyan, hogy éppen elfér az említett karakterek sorozata és a „\ 0”. Egyedi karakter a tömb lehet változtatni, de AAz üzenet mindig mutat ugyanarra a memória helyre. Ezzel szemben pmessage egy mutatót, inicializált, hogy pont egy string konstans. Az index értéke lehet változtatni, majd az utóbbi fog mutatni valami mást. Továbbá, ha megpróbál változtatni a tartalmát a állandók, az eredmény nem definiált.

További kapcsolódó szempontokat mutatók és tömbök bemutatják számos módosított változata két hasznos programok, amelyek vettünk a standard könyvtár. Ezek közül az első, strcpy funkció (s, t). t példányban karakterláncot egy string s. Szeretnék írni egy chat-s = t. de az üzemeltető példányban a mutató nem a karaktereket. Másolni a karakterek, meg kell hurok. Első kiviteli alak strcpy, segítségével egy tömb, a következő formában:
/ * Strcpy: copy t s egy sorban;
egy variáns egy sor * /
void strcpy (char s [], char t [])
míg a ((s [i] = t [i])! = '\ 0')
Összehasonlításképpen változata strcpy mutatókkal:
/ * Strcpy: copy t s egy sorban;
void strcpy (char * s, char * t)
Mivel a függvény csak a másolatait továbbítani értékeit az érveket, strcpy szabadon felhasználhassa a paramétereket s és t mind a lokális változók. Ezek a pontos kezdeti mutatókat, hogy mozog minden egyes alkalommal a következő karakter az egyes tömbök, ameddig a másolt karakterlánc t nem „\ 0”.
A gyakorlatban strcpy nem írok. Egy tapasztalt programozó inkább rövidebb eredménye:
/ * Strcpy: copy t s egy sorban;
2. lehetőség pointer * /
void strcpy (char * s, char * t)
A növekmény s és t végezzük a kontroll része a ciklus. Az érték a * t ++ a karakter, amely jelzi a t változó, mielőtt annak értéke növelhető; postfix ++ nem változik a mutató t. mígnem kivenni karakter, amelyre utal. Ugyanakkor, tekintettel a s. első karaktere lesz emlékezni a helyzetben mutatott a régi értékét s. és csak azután, hogy az s értéke növekszik. Csatárok szimbólum mind olyan érték, amely összeveti „\ 0”. A végén, az összes karakter másolása, beleértve a végső „\ 0”.
Észrevette, hogy az összehasonlítás a „\ 0” szükségtelen (mint a C nullától a kifejezés értékét az állapotot kezeljük, és hogyan ez az igazság), tudjuk, hogy még egy utolsó és csökkentésére irányuló program a szöveg:
/ * Strcpy: copy t s egy sorban;
3. lehetőség pointer * /
void strcpy (char * s, char * t)
Bár első ránézésre, hogy megkaptuk, úgy néz ki, titokzatos, mégis sokkal kényelmesebb bevitellel, és meg kell mester, mint a C programok akkor gyakran találkozhatunk vele.
Ami strcpy a standard könyvtár
A második program, amit úgy itt strcmp (s, t). Ez a kódot összehasonlítja húrok s és t, és visszatér negatív, nulla vagy pozitív értéket, illetve ha egy sorban s lexikografikusan kisebb, egyenlő vagy nagyobb, mint a húr t. Az eredményt úgy kapjuk, hogy kivonjuk az első páratlan szimbólum s és t.
/ * Strcmp: eredmények <0 при s > 0, ha s> t * / int strcmp (char s [], char t []) for (i = 0; s [i] == t [i]; i ++)Kapcsolódó cikkek