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.

Utalásokkal és vonósok C nyelven

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 . visszatér, mint a következtében a mutató egy új példányt a hú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