Tömbök, húrok, pointerek

2. tömbök, húrok, mutatók.

A tömb aggregált számos változó azonos típusú. Egy tömb nevével típusú típus hossz elemek nyilvánították az alábbiak szerint:

Ez megfelel annak a ténynek, hogy a változó típusa által bejelentett TYPE különleges nevek a [0], a [1]. egy [HOSSZ -1]. Mindegyik elem saját számot - index. Hozzáférés a x-edik tömb elem segítségével végzik, indexelés műveletek:

Ahogy egy index lehet használni bármilyen expressziós, kiemelkedő értéke egész típusú: char. rövid. int. hosszú. tömbindexek kezdeni 0 Cu (nem 1), és az index az utolsó eleme a tömb elemeinek HOSSZ - ez HOSSZ -1 (nem hossz). Ezért végigjárjuk az összes elemet a tömb - ez

INDX

Statikus tömbök kijelentjük elindulni. felsorolja az értékek az elemek a <> vesszővel elválasztva. Ha a készlet elemek kevesebb, mint a hossza a fennmaradó elemeit a tömb nullákkal tekinthető:

Ha a leírás a tömb inicializálása nem határozza meg annak méretét, azt fogják kiszámítani a fordító:

A mutató egy másik mutató, akkor lehet rendelni értéket azonos típusú. Ennek eredményeképpen mindkét mutató ugyanarra a helyre memória: ptr1 = ptr;

Mi lehet változtatni ukazuemuyu változó működtetésével *

Ebben az esetben azt regisztrálni, majd olvassuk le a tömb [x], amely fel mutató, azaz a

* A működés magyarázza a jelentését a leírás TYPE * ptr; ez azt jelenti, hogy a kifejezés értéke * PTR TYPE típusú. A név a típus a mutató is - azt (típus *). Különösen a TYPE maga is lehet egy index típusát - Kijelenthetjük egy mutatót egy mutatót, például char ** ptrptr;

Ez az összefüggés mutatók és tömbök lehetővé teszi számunkra, hogy alkalmazzák a művelet a tömb neve *: value = * array; ugyanazt jelenti, mint az érték = array [0];

Megjegyezzük, hogy a mutató lehet irányítani a rossz helyen - a memóriában részét tartalmazó adatok nem a típusát a leírás indikátor; vagy akár miután ismert, hogy:

Felesleges pointer hozzárendelés hibás érték még nem hiba. E mutató adat hiba csak akkor, amikor a keringés (az ilyen hibák nagyon nehéz keresni!).

sizeof (arr [0]) ad a méret egyik eleme. És mindez nem függ az elem típusát (csak azért, mert minden eleme a tömbök azonos méretű).

Egy sor bájt, akkor az alábbi konstrukciót, a megadott tömb (sorok) az azonos méretű: Ebben a részben azt a vonalat, és egy mutatót a karakter a fő.

Hogyan inicializált külső és statikus tömbök alapértelmezés szerint? Inicializált ha az automatikus tömbök alapértelmezés szerint? Hogyan tudok értékeket rendelhet a tömb elemeit tartozó bármely típusú memória?

Mivel egy tömb int arr [10]; hogy akkor jelenti a kifejezés:

Helyesen írva növekedését az összeg, amellyel a mutató a. egységenként? A válasz: nem, szükség van:

Mivel szövegrészre: Melyek a (Válasz: 'x', '\ 0', 'd')

Tudok levelet ++. Ugyanez a pro b ++. A Can írunk b = a. a = b. (No, igen, igen, nem)

Az alábbiakban egy olyan program, amely kiszámítja az átlagos értéket az említett tömb elemeit átírása a program segítségével mutatók.

Kinyomtatott eredményeként a program?

Miért arr [] tömb leírt kívül egy függvény fő ()? Hogyan lehet, hogy a main () függvény.

Válasz: írni a fő

Lehetséges, hogy írjon C az alábbiak szerint:

Válasz: Sajnos nem lehet (C - nem Algol). Amikor a számára fenntartott memória tömb, mint egy állandó méretű vagy expressziós módon van megadva, amely lehet fordítási időben kiszámítani, hogy értéke konstans, azaz A tömbök van egy fix hosszúságú.

Készítsen kétdimenziós tömb inicializálási program egy [10] [10], a mintát elemek egy [5] [5], hogy egy [9] [9], és azok nyomat. Használja a hozzáférést a cikkeket, amelyek a mutatót.

Készíts egy függvény kiszámítására skalár szorzata két vektor. A hossza a vektorok úgy definiáljuk, mint az egyik érv.

Fordító funkció szorzás sík tömb egy [] [] * b [] [].

Tedd háromdimenziós mátrixot szorzásművelet egy [] [] [] * b [] [] [].

Azok számára, akik programozott Pascal. valami hiba? V: A többdimenziós tömbök az index C az alábbiak szerint:

Ahogy írta azonos Például van, mint egy index az expressziós x, y (operátor „vessző”) egy y. azaz Van egy szintaktikai hiba, de a jelentése teljesen megváltozott!

Kétdimenziós tömbök képviselik a memóriában egydimenziós. Például, ha a minta a [y] [x] alakítjuk összeállításában egydimenziós szerkezete ehhez hasonló: azaz

Ennek az a következménye, hogy a fordító generál indexelés kétdimenziós (vagy több) ismernie kell a tömeg M - tömbméret a második dimenzió (valamint a harmadik, negyedik, stb.) Különösen az átviteli függvény egy többdimenziós tömb És amikor leírja külső tömbök: Így például munkát kell nézni a kétdimenziós tömb arr [SOR] [COLS] visszahúzza malloc ();

Hogyan kell leírni a kapcsolatok (pointerek) a kétdimenziós tömbök? Tekintsük a következő programot:

Itt van egy mutató ptr. Meg kell jegyezni, hogy ő adta a méret a második dimenzió: második. pontosan azért, hogy a fordító képes megfelelően kiszámítja a kétdimenziós kódokat.

Próbálja ki Ön is, hogy be

és látni, hogy milyen hatást gyakorol majd örömtelen (compiler, mellesleg, nem fog panaszkodni, de jó esélye van, hogy még mindig stransliruet ez az Ön számára, de működni fog rosszul.). Javasoljuk, hogy használja a ptr [x] [y].

Mit leírására? A változók C leírása a méret a használatuk. Mivel a leírás azt jelzi, hogy az f lehet használni, mint

Mivel azonban ez a módszer leírását által ismertetett legváltozatosabb és a jelentése teljesen nyilvánvaló. Fogadjuk (kölcsönzött a folyóirat „Communications ofthe ACM”) lehetővé teszi, hogy tisztázza a jelentését a leírás. C leírása lefordították egy leírást Algol-68 nyelvi stílusban. A következő néhány példát amelyek egyértelmű, és a konverziós módszer: azaz, f - függvény, ami visszaadja a mutató egy függvény, amely visszaadja egy egész szám. f - egy sor mutató visszatérő függvények egész számokat. Ezzel leírni
g a mutató egy függvény, amely visszaadja a mutatót, hogy egy sor mutató 5i funkciók visszatérnek mutatókat egészek. A Cu lehetséges funkcióit, hogy visszatérjen a tömb: nagyon név típus (például felhasználásra vezetési művelet típus) kapunk törlésével változó nevét (és azt is lehet hagyni a tömb mérete):

Írása funkció strcat (d, s), rendelt egy sorban s a sor végéig d.

Válasz: A ciklus jelölt „strcpy” - ez a legtöbb rövidítés szereplők ténylegesen strcat szabvány szerint kell visszaküldeni első érv a strcpy funkciót.

E két változat azt mutatják, hogy a funkció is megvalósítható különböző módokon. Ezen kívül meg kell állapítani, hogy ahelyett, hogy a szokásos könyvtári funkciókat, tudjuk meg egy függvény az azonos nevű, egy kissé eltérő viselkedést a normál (a visszatérési érték az első változat).

Kapcsolódó cikkek