Upload
fabianistvan
View
229
Download
0
Embed Size (px)
Citation preview
7/25/2019 C programozasi alapok
1/152
C programozsi alapok
Darvay Zsolt
7/25/2019 C programozasi alapok
2/152
C programozs 2
C programozs1. Tpusok s nevek a forrskdban
2. llandk s vltozk3. Hatkrk s az elfeldolgoz4. Bevitel s kivitel5. Kifejezsek6. Utastsok
7. Mutatk 8. Fggvnyek9. Struktrk s tpusok
10. llomnykezels
7/25/2019 C programozasi alapok
3/152
C programozs 3
1. Tpusok s nevek
a forrskdban
1.1. A forrsprogramok felptse1.2. Nevek s kulcsszavak1.3. Alapvettpusok
7/25/2019 C programozasi alapok
4/152
C programozs 4
1.1. A forrsprogramok
felptse
4A program felptse:4fggvnyekbl ll;4a ffggvny neve: main.
4A program trolsa:4ltalban .c vagy .cpp kiterjesztsllomny
(forrskd) - szvegszerkeszts.4Fordts -> lefordtott program (.obj).4Szerkeszts -> vgrehajthat llomny.
7/25/2019 C programozasi alapok
5/152
C programozs 5
1.2. Nevek s kulcsszavak4Nv (azonostnv): betk, _ karakter
(alhzs) s szmjegyek sorozata.Betvel vagy _ karakterrel kezddik.4
Kisbetk s nagybetk klnbznek!4A nvnek jellemznek kell lennie.4Kulcssz (lefoglalt sz)4pl. if, for, while, stb.
4A nv nem lehet kulcssz.
7/25/2019 C programozasi alapok
6/152
C programozs 6
1.3. Alapvet
tpusok4char - karakter;4double - vals, ktszeres pontossg;4float - vals, egyszeres pontossg;4int - egsz;4Mdostjelzk:4long (hossz), short (rvid),4signed (eljeles), unsigned (eljel nlkli).
7/25/2019 C programozasi alapok
7/152
C programozs 7
A mdostjelz
k hasznlata
4Az ismertetett tpusokhoz csatolva j tpuskpezhet.4Pldul:4unsigned - ugyanaz mint: unsigned int,4unsigned long - ugyanaz mint:
unsigned long int.
7/25/2019 C programozasi alapok
8/152
C programozs 8
2. llandk s vltozk2.1. Literlok2.2. Vltozdeklarcik2.3. Vltozk kezdrtke
2.4. Konstansdeklarcik
7/25/2019 C programozasi alapok
9/152
C programozs 9
2.1. Literlok4Olyan lland (konstans), amelyhez nem
rendelnk azonostnevet.4A tpusa s rtke jellemzi.4
Az rtk nem mdosthat futtats kzben.4Egsz literlok4Lebegpontos literlok4Karakterliterlok4Karakterlnc-literlok
7/25/2019 C programozasi alapok
10/152
C programozs 10
Egsz literlok4Decimlis (10-es szmrendszerbeli),4hexadecimlis (16-os szmrendszerbeli),4oktlis (8-as szmrendszerbeli) llandk.
4Az egsz literlok trolsa fgg afordtprogramtl. Pldul a Borland C++
3.1-ben az int tpus mrete 2 byte, aVisual C++ .NET-ben pedig 4 byte, s ezhatssal van az llandk trolsra is.
7/25/2019 C programozasi alapok
11/152
C programozs 11
Decimlis literlok4Pldk:4357 (int), -6962 (int),412300L vagy 12300l (long),414000U vagy 14000u (unsigned),411700LU vagy 11700UL vagy 11700lu
vagy 11700ul (unsigned long).
7/25/2019 C programozasi alapok
12/152
C programozs 12
Decimlis literlok trolsa
4Borland C++ 3.1-ben:472000 (long),485000U vagy 85000u (unsigned long).4Visual C++ .NET-ben:472000 (int),485000U vagy 85000u (unsigned int).
7/25/2019 C programozasi alapok
13/152
C programozs 13
Hexadecimlis s
oktlis literlok
40 (8-as szmrendszer),40x vagy 0X (16-os szmrendszer).4Pldk:40100 a 10-es szmrendszerben: 64,40x100 a 10-es szmrendszerben: 256.4Ebben az esetben is hasznlhat az U, u
illetve L, l uttag.
7/25/2019 C programozasi alapok
14/152
C programozs 14
Lebeg
pontos literlok4Trols double. Ha a F vagy f uttagot
hasznljuk, akkor float lesz, illetve L vagyl esetn long double.
4Pldk vals (lebegpontos) literlokra:4311. (double), -5.24 (double),
45.1e3 (double), .1e-5 (double),4-2.54f (float), 1.5L (long double).
7/25/2019 C programozasi alapok
15/152
C programozs 15
Karakterliterlok4A - egy karakter.4C-ben int tpus, C++ -ban pedig char.4ltalban a karakternek megfelelASCII
kdot troljuk.4Escape karakterek
4Fehr (lthatatlan) karakterek
7/25/2019 C programozasi alapok
16/152
C programozs 16
Escape karakterek4\n NL (LF) jsor (sortrs) 104\r CR kocsivissza 134\t HT vzszintes tabultor 9
4\ idzjel 344\ aposztrf 394
\\ \ fordtott perjel 924\ooo ooo oktlis szm4\xhh hh hexadecimlis szm
7/25/2019 C programozasi alapok
17/152
C programozs 17
Pldk escape karakterekre4Escape szekvencik (escape jelsorozatok):434, '\', \42 s \x22 ugyanaz.465, A, \101 s \x41 ugyanaz.
4A null karakter: \0 (az rtke 0). Klnbzik a0 karaktertl, aminek az rtke 48 az ASCIIkszletben.4A null karakternek fontos szerepe van a
karakterlnc-literlok trolsban.
7/25/2019 C programozasi alapok
18/152
C programozs 18
Fehr karakterek4Lthatatlan karakterek,4res hely karakterek (trkzk):4szkz: ,
4vzszintes tabultor (behzs): \t,4jsor: \n.
4Bizonyos C, illetve C++, fordtk ezekenkvl mg ms karaktereket is fehrkarakterknt kezelhetnek.
7/25/2019 C programozasi alapok
19/152
C programozs 19
Karakterlnc-literlok4Karaktersorozatok (C stlus string-ek).4A null karakterrel vgzdnek. Pldul:4ABC trolsa: A, B, C, \0.4Hasznlhatjuk az escape karaktereket is.4Karakterlnc-literlok tpusa4Hossz karakterlncok
7/25/2019 C programozasi alapok
20/152
C programozs 20
Karakterlnc-literlok tpusa
4Tpusa C-ben, s a C++ rgebbivltozataiban: char * (mutat egykarakterhez).
4A karakterlnc-literlokat egy char *tpus mutatnak tadhatjuk.
7/25/2019 C programozasi alapok
21/152
C programozs 21
Hossz karakterlncok4A kvetkezsorban folytatni lehet.
41. plda (-al jelljk a szkzt):abcd\xA kapott karakterlnc: abcdx42. plda:
abcdefgA kapott karakterlnc: abcdefg.
7/25/2019 C programozasi alapok
22/152
C programozs 22
2.2. Vltozdeklarlcik4Vltoz: adat, ami mdosthatja az
rtkt a program futtatsa kzben.4Minden vltozt deklarlni kell.4Deklarcik szerkezete4Egyszertpus vltozk deklarlsa
4Tmbk deklarlsa
7/25/2019 C programozasi alapok
23/152
C programozs 23
Deklarcik szerkezete4Tetszleges deklarcira (nem csak a
vltozkra) vonatkozik:4minst (pldul: static)4
alaptpus4deklartor4kezdrtk-ad kifejezs
4A minsts a kezdrtk-ad kifejezselmaradhat.
E t lt k
7/25/2019 C programozasi alapok
24/152
C programozs 24
Egyszertpus vltozk
deklarlsa4Deklarci:4tpus nevek_listja;4Pldk:
4int x, y, z;4char c;4int* p, u, v; // az opertor csak egy//nvre vonatkozik (csak a p lesz mutat).//Ha lehet kerlni kell az ilyen deklarcit.
7/25/2019 C programozasi alapok
25/152
C programozs 25
Tmbk deklarlsa4Deklarci: tmb (tblzat)4tpus nv[h1][h2][hn];4tpus: elemek tpusa;
4hi: i-edik index felshatra, teht4az indexek 0 s hi-1 kztt vltozhatnak;4n: tmb dimenzija, teht4n=1 vektor, n=2 mtrix.
4Hivatkozs: nv[i1][i2][in]
7/25/2019 C programozasi alapok
26/152
C programozs 26
Pldk tmbkre4int a[10]; // egsz elemekbl ll tmb.
4Hivatkozs az elemekre:a[0] - elselem
a[9] - tzedik elem (utols)a[10] - hiba, mivel csak tz elem szmra vanlefoglalva memriaterlet.
4int b[10][20]; // egy 10 sorbl s 20 oszlopbl llmtrix.
4b[i][j] - i-edik sor, j-edik oszlop
7/25/2019 C programozasi alapok
27/152
C programozs 27
Karakterekb
l ll tmbk4char s[20]; //egy karakterekbl ll
vektor, tulajdonkppen ez egykarakterlnc.4
s[0] az elskarakter.4Nem hasznlhatk opertorok akarakterlncokra. E helyett a string.h
llomnyban standard fggvnyek vannakdeklarlva. Pldul: strcpy, strcat, strcmp.
7/25/2019 C programozasi alapok
28/152
C programozs 28
2.3. Vltozk kezd
rtke4Deklarci: minst, alaptpus,
deklartor, kezdrtk-ad kifejezs.4Pldk:4int n = 6;4int t[] = {11, 22, 33, 44, 55, 66};4
static int *p = t;
7/25/2019 C programozasi alapok
29/152
C programozs 29
Alaprtelmezett kezdeti rtk4A globlis s a helyi statikus vltozk kezdeti
rtke zr lesz alaprtelmezs szerint. Ezeketstatikus objektumoknakis nevezzk.4
A helyi, de nem statikus vltozk (automatikusobjektumok), illetve a dinamikus mdonltrehozott vltozk (dinamikus objektumok)
nem rendelkeznek alaprtelmezett kezdetirtkkel. Lsd mg:
Memriakezels
7/25/2019 C programozasi alapok
30/152
C programozs 30
2.4. Konstansdeklarcik4Nem vltoztathatjk rtkket futsi
idben. Klnben mr a fordtskor hibtszlelnnk.
4A const minstvel jelezzk, hogykonstansrl van sz.
3 Hatkrk s az
7/25/2019 C programozasi alapok
31/152
C programozs 31
3. Hatkrk s az
el
feldolgoz3.1. Az elfeldolgoz3.2. Loklis s globlis hatkrk3.3. Memriakezels
7/25/2019 C programozasi alapok
32/152
C programozs 32
3.1. Az elfeldolgoz
4Elfeldolgoz (elfordt, preprocesszor).4Egy makr-feldolgoz rendszer.4Fordts eltti feldogozsa a programnak.4Forrskd bekelse4Szimbolikus llandk definilsa4Makrk definilsa4Feltteles fordts
7/25/2019 C programozasi alapok
33/152
C programozs 33
Forrskd bekelse
4Standard llomnyok:
#include 4Sajt llomnyok:
#include llomnynv4Elrsi tvonalat is tartalmazhatnak (a karakterlncbelsejben a \ karaktert meg kell duplzni).
4ltalban fejllomnyokat (header) kelnk be(kiterjesztsk .h). Az jabb C++ fordtkszabvnyos fejllomnyainak nincs kiterjesztse.
7/25/2019 C programozasi alapok
34/152
C programozs 34
Szimbolikus llandk
4Jelkpes konstansoknak is nevezzk.
#define nv karakterek_sorozata4A definils helytl az llomny vgig a nv
sszes elfordulst a karakterek sorozatracserli.4Ha az
#undef nvjelen van, akkor csak addig a sorig.
3.2. Loklis s
7/25/2019 C programozasi alapok
35/152
C programozs 35
3.2. Loklis sgloblis hatkrk
4Egy nv deklarcija azt jelenti, hogy azilletnv egy bizonyos hatkrbenhasznlhat.
4Loklis (helyi) hatkrk4Globlis hatkrk
7/25/2019 C programozasi alapok
36/152
C programozs 36
Loklis hatkrk
4Egy fggvny loklis vltozja csak afggvny belsejben hasznlhat. Ez ablokk az illetvltoz hatkre. Plda:
void f(){
int x;...}
Az x vltoz csak a
fggvny belsejbenhasznlhat. Az xhatkre ez a blokk.
7/25/2019 C programozasi alapok
37/152
C programozs 37
Globlis hatkrk
4Egy globlis nv hatkre a deklarcihelytl az llomny vgig terjed. Egyextern tpus deklarci kiterjesztheti ezt
a hatkrt ms llomnyra is.4Egy nv akkor globlis, ha a
fggvnyeken kvl van megadva.
7/25/2019 C programozasi alapok
38/152
C programozs 38
3.3. Memriakezels
4A vltozk helyet kaphatnak:4a statikus memriban;4az automatikus memriban;
4a szabad trban.4Lsd mg:
Alaprtelmezett kezdeti rtk
7/25/2019 C programozasi alapok
39/152
C programozs 39
A statikus memria
4A statikus memriban lesznek elhelyezvea globlis vltozk s a fggvnyekbelsejben deklarlt statikus vltozk.
4A szerkeszt(linker) foglalja le a statikusmemriban a helyet, a program
futtatsnak teljes id
tartamra.
7/25/2019 C programozasi alapok
40/152
C programozs 40
Az automatikus memria
4A fggvnyek paramtereit s a helyi vltozkat
az automatikus memriban hozza ltre arendszer.4Az adott blokk minden egyes vgrehajtsakor j
pldnyok jnnek ltre ezekbl a vltozkbl, ablokk vgn pedig automatikusan fel lesz
szabadtva az ltaluk lefoglalt memriaterlet.4Az automatikus vltozk a veremben vannak
elhelyezve.
7/25/2019 C programozasi alapok
41/152
C programozs 41
A szabad tr
4A szabad trban elhelyzett elemek
memriakezelst a programoz hivatottmegvalstani.4Sem a memriaterlet lefoglalst, sem a
felszabadtst nem vgzi el automatikus mdona rendszer.
4A vltozk a dinamikus memriban, vagy akupacban (heap) vannak elhelyezve.
7/25/2019 C programozasi alapok
42/152
C programozs 42
4. Bevitel s kivitel
4.1. Bevitel s kivitel megvalstsafggvnyekkel4A printf s a scanf fggvnyek
4A getchar s putchar makrk4A gets s puts fggvnyek
7/25/2019 C programozasi alapok
43/152
5. Kifejezsek
7/25/2019 C programozasi alapok
44/152
C programozs 44
5. Kifejezsek
5.1. Operandusok s opertorok5.2. Kiterjeszts s konverzi5.3. Aritmetikai opertorok
5.4. sszehasonlt s logikai opertorok5.5. Bitenknti opertorok
5.6. rtkad opertorok5.7. Lptetopertorok
7/25/2019 C programozasi alapok
45/152
C programozs 45
5. Kifejezsek
5.8. A sizeof opertor
5.9. A cm opertor5.10. A zrjel opertorok
5.11. A feltteles opertor5.12. A vesszopertor
5.13. Precedencia s kirtkelsi irny
5.1. Operandusok
7/25/2019 C programozasi alapok
46/152
C programozs 46
s opertorok
4Egy kifejezs operandusokbl s
opertorokbl ll.4Az opertor egy mvelet. Ez vonatkozhat
egy operandusra (unris), vagy ktoperandusra (binris). Van egyetlenhrom operandusra vonatkoz opertor
(feltteles opertor).4Az operandust a tpus s rtk jellemzi.
7/25/2019 C programozasi alapok
47/152
C programozs 47
Operandusok
Az operandus lehet:
4lland4szimbolikus lland4
vltoznv4tmbnv4struktranv4tpusnv4fggvnynv
4tmb eleme4struktra eleme4
fggvnymeghvs4(kifejezs)
7/25/2019 C programozasi alapok
48/152
C programozs 48
Kifejezsek kirtkelse
4Figyelembe kell venni:4a mveletek sorrendjt(precedencia, priorits);
4az azonos priorits mveletek kirtkelsiirnyt (ktsi szablyok, vagyasszociativits - nem a legjobb elnevezs);4az automatikus tpuskonverzi szablyait.
7/25/2019 C programozasi alapok
49/152
C programozs 49
5.2. Kiterjeszts s konverzi
4Automatikus tpuskonverzi (ms nven:
alaprtelmezs szerinti konverzi, implicittpuskonverzi).4Ha az operandusok azonos tpusak akkor az
eredmny tpusa megegyezik az operandusoktpusval.4Kiterjeszts (automatikus konverzi, amely
megrzi az rtkeket, angolul: promotion)4Konverzi
Kit j t C b
7/25/2019 C programozasi alapok
50/152
C programozs 50
Kiterjeszts a C-ben
4A karakter tpusok egsz tpuss lesznek
konvertlva.4A felsorol tpusok egsz tpusra lesznek
alaktva.
4Plda:enum szinek {piros, sarga, zold} s;
int x;s = piros; // zrx = s + 1; // x = 1 lesz.
K i
7/25/2019 C programozasi alapok
51/152
C programozs 51
Konverzi
4Tbb fle konverzira van lehetsg.4Ezek kzl az aritmetikai konverzi a
leggyakoribb.
A it tik i k i
7/25/2019 C programozasi alapok
52/152
C programozs 52
Aritmetikai konverzi
4Ha a kt operandus tpusa klnbz,
akkor az alacsonyabb tpus amagasabb tpusra lesz konvertlva
(cskken: long double, double, float,unsigned long, long, unsigned, int).
Meghatrozottt k t
7/25/2019 C programozasi alapok
53/152
C programozs 53
tpusknyszerts
4Explicit tpuskonverzi (tpusknyszerts)
a C-ben (a tpusmdost opertor).
Explicit tpuskonverziC b
7/25/2019 C programozasi alapok
54/152
C programozs 54
a C-ben
4Tpusmdost opertor:
(tpus) kifejezs4A kifejezst az adott tpusra alaktja.
4A tpusmdost opertor magasprecedencija miatt a kifejezs ltalbanegy vltoznv lesz.4Ellenkezesetben a kifejezs helyn
(kifejezs) lehet.
5 3 Aritmetikai opertorok
7/25/2019 C programozasi alapok
55/152
C programozs 55
5.3. Aritmetikai opertorok
4unris: + s -
4binris:4multiplikatv: * / %4
additv: + s -4Pldk:414 / 3 eredmny: 4 (egsz oszts,
hnyados).414 % 3 eredmny: 2 (osztsi maradk).
5.4. sszehasonlt sl ik i t k
7/25/2019 C programozasi alapok
56/152
C programozs 56
logikai opertorok
4sszehasonlt opertorok4Relcis opertorok4Egyenlsg s klnbzsg
4Logikai opertorok
Relcis opertorok
7/25/2019 C programozasi alapok
57/152
C programozs 57
Relcis opertorok
4Ezek: < >= (op)
4k1, k2 s k3 kifejezsek4A C-ben nincsenek logikai tpusok:
40 (hamis), nemzr (igaz).4A C-ben a k3 rtke 1 vagy 0 lesz attl fggen,
hogy fennll a felttel, vagy nem.
k3k1 op k2
Egyenlsg s klnbzsg
7/25/2019 C programozasi alapok
58/152
C programozs 58
Egyenlsg s klnbzsg
4Ezek: == s != (op)
4k1, k2 s k3 kifejezsek4Egyenlsg: ==
4Klnbzsg: !=4A C-ben a k3 rtke 1 vagy 0 lesz attl fggen,
hogy fennll a felttel, vagy nem.
k3k1 op k2
Logikai opertorok
7/25/2019 C programozasi alapok
59/152
C programozs 59
Logikai opertorok
4Unris: ! (tagads)
!kifejezs4rtke 0, ha a kifejezs igaz, illetve 1, ha
a kifejezs rtke zr (hamis).4Binris:
4&& (logikai s)4|| (logikai vagy)
Binris logikai opertorok
7/25/2019 C programozasi alapok
60/152
C programozs 60
Binris logikai opertorok
4Ezek: && s || (op)
4k1, k2 s k3 kifejezsek4Logikai s: &&4Logikai vagy: ||4A C-ben k3 rtke 1 vagy 0 lesz.
k3k1 op k2
5 5 Bitenknti opertorok
7/25/2019 C programozasi alapok
61/152
C programozs 61
5.5. Bitenknti opertorok
4Ide tartozik a:
4~ (komplementum)4> (eltols jobbra)4& (bitenknti s)4^ (bitenknti kizr vagy)4| (bitenknti vagy)
4Egsz tpusokra alkalmazzk. A trolsi terletrevonatkoznak.
5 6 rtkad opertorok
7/25/2019 C programozasi alapok
62/152
C programozs 62
5.6. rtkad opertorok
4Balrtk (lvalue): olyan kifelyezs, amely
szerepelhet az rtkadsok bal oldaln.4Kivtelt kpeznek a const segtsgvel
megadott balrtkek.4A nem const-knt megadott balrtket
mdosthat balrtknek is nevezzk.
4Egyszerrtkads4Mvelet s rtkads
Egyszer rtkads
7/25/2019 C programozasi alapok
63/152
C programozs 63
Egyszerrtkads
4Az = opertorral fejezzk ki:
4k1: mdosthat balrtk kell legyen.4A k1 felveszi k2 rtkt.4A k3 rtke a k1 megvltoztatott rtkvel
(az tadott rtkkel) egyezik meg.
k3k1 = k2
Pldk egyszer rtkadsra
7/25/2019 C programozasi alapok
64/152
C programozs 64
Pldk egyszerrtkadsra
4Kirtkelsi irny: jobbrl balra
int x, y, z;x = y = z = 10;
4Az sszes vltoz rtke 10 lesz.int *p; // mutat...*p = 20; // az int tpus szm rtke,
// ahova a p mutat, 20 lesz.
Mvelet s rtkads
7/25/2019 C programozasi alapok
65/152
C programozs 65
Mvelet s rtkads
4Az op tetszleges binris aritmetikai vagy
bitenknti opertor lehet.
4k1: mdosthat balrtk kell legyen.4
A kifejezs k1 = k1 op (k2) -vel egyenrtk.4A k3 rtke a k1 megvltoztatott rtkvel (az
tadott rtkkel) egyezik meg.
k3k1 op= k2
5.7. Lptet opertorok
7/25/2019 C programozasi alapok
66/152
C programozs 66
5.7. Lptetopertorok
4Nvelopertor: ++
4Cskkentopertor: --4Hasznlhat eltagknt s uttagknt is.4
Eltagknt: ++k1 vagy --k1.4Uttagknt: k1++ vagy k1--.4A k1 mdosthat balrtk kell legyen.4A ++ nveli a k1 rtkt 1-el, a -- pedig
cskkenti 1-el.
Ms elnevezs
7/25/2019 C programozasi alapok
67/152
C programozs 67
Ms elnevezs
4nvelopertor = inkrementl opertor
4cskkentopertor = dekrementlopertor
4postfix opertor = uttagknt hasznltopertor4
prefix opertor = eltagknt hasznltopertor
Lptets eltaggal
7/25/2019 C programozasi alapok
68/152
C programozs 68
Lptets eltaggal
4Ha a lptetopertort eltagknt hasznljuk, akkor
elszr mdostjuk a balrtket (k1-et), majd akapott rtket hasznljuk a kifejezsben.4Plda:
int x = 20;int y;
y = ++x; // ugyanaz, mint y = (x+=1);// a zrjel itt el is hagyhat.4Ekkor x = 21 s y = 21 lesz.
Lptets uttaggal
7/25/2019 C programozasi alapok
69/152
C programozs 69
Lptets uttaggal
4Ha a lptetopertort uttagknt hasznljuk, akkor
elszr hasznljuk a k1-et a kifejezsben, majd eztkveten mdostjuk az rtkt.4Plda:
int x = 20;int y, z;
y = x++; // ugyanaz, mint y = (z=x,x+=1,z);// a zrjel nem hagyhat el.4Ekkor x = 21 s y = 20 lesz.
5.8. A sizeof opertor
7/25/2019 C programozasi alapok
70/152
C programozs 70
5.8. A sizeof opertor
4Egy adatnak, illetve egy tpusnak a
mrett fejezi ki bjtokban.4Alakja:
sizeof kifejezs,4illetve
sizeof(tpus).
5.9. A cm opertors a referencia tpus
7/25/2019 C programozasi alapok
71/152
C programozs 71
s a e e e c a t pus
4A cm opertor hasznlata:
& k14A k1 kifejezs mdosthat balrtk kell legyen.4
A kifejezs rtke a k1-nek megfeleladatmemriabeli cme.4Ez annak a memriaterletnek a kezdete, ahol a
k1 trolva van.4A scanf fggvny esetn gyakran hasznljuk.
5.10. A zrjel opertorok
7/25/2019 C programozasi alapok
72/152
C programozs 72
j p
4Fggvnyhvs:
kifejezs(kifejezs_lista)4A () opertort a mveletek sorrendjnek
megvltoztatsra is hasznlhatjuk.4Indexels:mutat[kifejezs]
4A tmb neve is egy mutatkntkezelhet.
5.11. A feltteles opertor
7/25/2019 C programozasi alapok
73/152
C programozs 73
p
4Alakja:
4A k1 egy felttel. Ennek az rtktl fgg akifejezs rtke (k4).
4Ha a k1 igaz (nem zr), akkor a k4 rtke k2-vel,ellenkezesetben pedig k3-al fog megegyezni.
k4k1 ? k2 : k3
Plda feltteles opertorra
7/25/2019 C programozasi alapok
74/152
C programozs 74
p
int a = 25;
int b = 34;int m;
m = (a>b) ? a : b; // maximum
5.12. A vesszopertor
7/25/2019 C programozasi alapok
75/152
C programozs 75
p
4Ms nv: mveletsor. Alakja:
4A k3 rtke s tpusa megegyezik k2-vel.4Akkor hasznljuk, ha a szintaxis egyetlen
kifejezst kvetel meg, de mi tbbetszeretnnk hasznlni.
k3k1, k2
5.13. Precedencia skirtkelsi irny
7/25/2019 C programozasi alapok
76/152
C programozs 76
y
4Precedencia (priorits, a mveletek
sorrendje)4Kirtkelsi irny (ktsi szablyok)
Precedencia
7/25/2019 C programozasi alapok
77/152
C programozs 77
4A precedencira vonatkozan pontos szablyok
lteznek.4Egyes szablyok a matematikbl ismertek.
Pldul a binris multiplikatv mveletek
magasabb prioritssal rendelkeznek, mint abinris additv opertorok.4
A m
veletek sorrendjt mindigmeghatrozhatjuk a zrjelek hasznlatval.
Kirtkelsi irny
7/25/2019 C programozasi alapok
78/152
C programozs 78
4ltalban balrl jobbra trtnik a
kirtkels. Pldul: x + y - z ugyanaz,mint (x + y) - z.4
Az unris, illetve az rtkad opertorokjobbrl balra lesznek kirtkelve.4
Pldul *++p ugyanaz, mint *(++p).4Tovbb: x=y=z ugyanaz, mint x=(y=z).
6. Utastsok
7/25/2019 C programozasi alapok
79/152
C programozs 79
6.1. ltalnos utastsok
6.2. Elgazsok4Az if utasts4A switch utasts
6.3. Ciklusok4A while utasts4A do while utasts
4A for utasts6.4. Az exit fggvny s a break utasts
7/25/2019 C programozasi alapok
80/152
7. Mutatk
7. Mutatk
7/25/2019 C programozasi alapok
81/152
C programozs 81
7.1. Deklarci
7.2. Kapcsolat a tmbkkel7.3. Mveletek mutatkkal
7.4. A dinamikus memria kezelse4C stlus memriafoglals s felszabadts
7.5. Mutatkbl ll tmbk s aparancssor paramterei
7.1. Deklarci
7/25/2019 C programozasi alapok
82/152
C programozs 82
4A mutat (pointer) olyan vltoz, amely
cmeket tartalmaz.4A mutatk segtsgvel olyan vtozk
rtkeire hivatkozhatunk, amelyeknek acmt ismerjk.4Mutat tpus: tpus *
4Deklarci:tpus * nv;
A cm opertor
7/25/2019 C programozasi alapok
83/152
C programozs 83
4Egy vltoz cmt hatrozza meg. Plda:
int x = 10;double y = 5.9;
int *p;double *q;p = &x; // p egy x-re hivatkoz mutat
p = &y; // hibaq = &y; // helyes
Az indirekci opertor
7/25/2019 C programozasi alapok
84/152
C programozs 84
4Ms nven: dereferencia
4A * (unris) opertort hasznljuk.4Plda:
int x = 10;int *p = &x;*p = 50; // *p annak a vltoznak az rtke,
// amely az illetcmen trolva van.// Ugyanaz mint: x = 50.
Void tpusrahivatkoz mutatk
7/25/2019 C programozasi alapok
85/152
C programozs 85
void *p;
int x = -1;p = &x;int *q1 = (int *)p; // explicit tpusknyszerts
printf(%d\n, *q1);unsigned *q2 = (unsigned *)p; // vigyzat!printf(%u\n, *q2);
int z = *(int *)p;printf(%d\n, z);
Az eredmny
7/25/2019 C programozasi alapok
86/152
C programozs 86
4Visual C++ .NET fordtval:
-14294967295
-14A 4294967295 = 232 - 1 szm a maximlis
unsigned.
7.2. Kapcsolat a tmbkkel
7/25/2019 C programozasi alapok
87/152
C programozs 87
4A tmb neve gy tekinthet, mint egy mutat
az elselemre.4Plda:
int t[50];int *p;p = t; // helyes
t = p; // fordtsi hiba4A tmb neve egy lland pointerknt kezelhet.
Tmb tpus paramter
7/25/2019 C programozasi alapok
88/152
C programozs 88
4Tekintsk a
void f(double t[]);4fggvnydeklarcit. Ez ugyanaz, mint:void f(double *t);
4Meghvs:double z[3]={1.1, 2.2, 3.3};f(z);
4Ebben az esetben a tmbnv nem llandmutat.
7.3. Mveletek mutatkkal
7/25/2019 C programozasi alapok
89/152
C programozs 89
4Nvels s cskkents
4Egsz szmra s mutatra alkalmazottmvelet4
Egsz szm hozzadsa mutathoz4Egsz szm kivonsa mutatbl
4
Mutatk sszehasonltsa4Mutatk klnbsge
Nvels s cskkents
7/25/2019 C programozasi alapok
90/152
C programozs 90
4Legyen: tpus *m;
4Nvels: ++m vagy m++.4Cskkents: --m vagy m--.4
Mindig sizeof(tpus)-al mdosul a megfelel
cm,teht az m rtke.4Ha az m egy tmb egyik elemhez mutat, akkor
a kvetkez, illetve az elzelemre hivatkozmutatt kapjuk.
Plda lptetopertorra
7/25/2019 C programozasi alapok
91/152
C programozs 91
int t[5]={11, 22, 33, 44, 55};
int *m = t;printf("cim: %p\tertek: %d\n", m, *m);
m++;printf("cim: %p\tertek: %d\n", m, *m);4Lehetsges kimenet (Visual C++ .NET):
cim: 0066FDE4 ertek: 11cim: 0066FDE8 ertek: 22
Egsz szmra s mutatraalkalmazott mvelet
7/25/2019 C programozasi alapok
92/152
C programozs 92
4Legyen:
tpus *m;int x; // vagy ms egsz tpus
4
Akkorm + x : m rtke nvelve x*sizeof(tpus)-al.m - x : m rtke cskkentve x*sizeof(tpus)-al.4Ha t egy tmb neve, akkor t[i] megegyezik
*(t+i) -vel.
Plda hozzadsras kivonsra
7/25/2019 C programozasi alapok
93/152
C programozs 93
int t[5]={11, 22, 33, 44, 55};
int *m = t;int *q;q = m + 2; // 33
q = 1 + q; // 44q = -1 + q; // 33q = q - 2; // 11
q += 3; // 44q -= 3; // 11
Mutatk sszehasonltsa
7/25/2019 C programozasi alapok
94/152
C programozs 94
4Akkor vgezhetel, ha a kt mutat
ugyanannak a tmbnek az elemeire hivatkozik.4Ha a p pointer t[u]-ra mutat, s a q pointer
t[v]-re mutat, akkor:
p op q ugyanaz, mint u op v,4ahol op tetszleges sszehasonlt opertor
lehet.4op: < = > == !=
Mutatk klnbsge
7/25/2019 C programozasi alapok
95/152
C programozs 95
4Ebben az esetben is a kt mutat
ugyanannak a tmbnek az elemeire kellhivatkozzon.4
Ha a p pointer t[u]-ra mutat, s a qpointer t[v]-re mutat, akkor:p - q ugyanaz, mint u - v.
Plda mutatk klnbsgre
7/25/2019 C programozasi alapok
96/152
C programozs 96
int t[5]={11, 22, 33, 44, 55};
int *p = t+1;int *q = t+4;
printf("%d\n", q-p); // 3printf("%d\n", p-q); // -3
7.4. A dinamikusmemria kezelse
7/25/2019 C programozasi alapok
97/152
C programozs 97
4Ms nven: dinamikus memriakioszts,
memriaterlet lefoglalsa sfelszabadtsa.4
C stlus memriafoglals s felszabadts(szabvnyos fggvnyekkel)4Az elhelyez s felszabadt opertorok
(C++)
C stlus memriafoglalss felszabadts
7/25/2019 C programozasi alapok
98/152
C programozs 98
4Lefoglals
4A malloc fggvny4A calloc fggvny
4Felszabadts4A free fggvny
Az malloc s callocfggvnyek
7/25/2019 C programozasi alapok
99/152
C programozs 99
4Plda:
double *m;int x=20;m = (double *)malloc(x*sizeof(double));
4Hsz vals szmra foglal le memriaterletet.
4Ugyanaz, mint:m = (double *)calloc(x, sizeof(double));
4Tpuskonverzira van szksg, mivel a visszatrtetttpus void *.
A free fggvny
7/25/2019 C programozasi alapok
100/152
C programozs 100
4Az elzplda esetn a:
free(m);4felszabadtja a lefoglalt memriaterletet.
4A free fggvnynek void * tpus aformlis paramtere, de az m
automatikusan erre a tpusra leszkonvertlva.
7.5. Mutatkbl ll tmbks a parancssor paramterei
7/25/2019 C programozasi alapok
101/152
C programozs 101
4Mutatkbl ll tmbk (a tmb elemei
pointerek).4A parancssor paramterei (a ffggvnynek
tadott paramterek).
4Dos: pldul legyen a vgrehajthat llomnyneve: cprogr.exe). Ekkor
C:\Temp>cprogr param1 param2 4Windows: Start->Run ablakban.
Mutatkbl ll tmbk
7/25/2019 C programozasi alapok
102/152
C programozs 102
4Plda:
char *mese[] = {"Piroska","farkas",
"nagymama};printf("%s\n", mese[0]); // Piroska
4A tmb karakterlnc-literlokra hivatkozmutatkbl ll.
A parancssor paramterei
7/25/2019 C programozasi alapok
103/152
C programozs 103
4A ffggvny fejlce:
int main(int argc, char *argv[])4A visszatrtett rtk tpusa void is lehet.4A formlis paramterek jelentse:
4argc = a parancssor paramtereinek a szma + 1;4argv[0] = mutat a vgrehajthat llomny
nevhez (az tvonalat is tartalmazza).4argv[i] = egy karakterlnc-literlhoz mutat, amely
az i-edik (1 i argc-1) paramtert tartalmazza.
8 Fggvnyek
7/25/2019 C programozasi alapok
104/152
8. Fggvnyek
8. Fggvnyek
7/25/2019 C programozasi alapok
105/152
C programozs 105
8.1. Deklarci s definci
8.2. Fggvnyek meghvsa s avisszatrtett rtk
8.3. Paramtertads8.4. Fggvnyekre hivatkoz mutatk
8.1. Deklarci s definci
7/25/2019 C programozasi alapok
106/152
C programozs 106
4Fggvnydefinci
4Fggvnydeklarci(fggvny-meghatrozs)4
Pldk
Fggvnydefinci
7/25/2019 C programozasi alapok
107/152
C programozs 107
4Definci teljes szerkezet megadsa.
tpus nv(formlis paramterek listja)
{ deklarcikutastsok
}
Fggvnyek osztlyozsa avisszatrtett tpus szerint
7/25/2019 C programozasi alapok
108/152
C programozs 108
4Kt fle fggvny:4visszaad egy rtket4tpus a visszaadott rtk tpusa;4algoritmikus nyelvbeli fggvny;4
nem void tpust visszaad fggvny(nem void fggvny);4nem ad vissza rtket
4a tpus void lesz;4algoritmikus nyelvbeli eljrs;4void fggvny.
A definci kt rsze
7/25/2019 C programozasi alapok
109/152
C programozs 109
4Fejlc: tpus nv(formlis paramterek listja)4A fggvny belseje (a fggvny teste, a fggvny
trzse, blokk):{
deklarcikutastsok}
4A formlis paramterek listja: vltozdeklarcik,vesszvel elvlasztva. Lehet res is, de a zrjelekekkor is jelen kell legyenek.
Fggvnydeklarci
7/25/2019 C programozasi alapok
110/152
C programozs 110
4Deklarci:
tpus nv(formlis paramterek listja);4Teht: fejlc;
4Ezt mg prototpusnak is nevezzk.4Deklarlskor a formlis paramterek
nevei elmaradhatnak (a tpusoknakmindenkppen jelen kell lennik).
Pldk fggvnydeklarcikra
7/25/2019 C programozasi alapok
111/152
C programozs 111
4A formlis paramterek listja res:void f();
4Kt paramter (egy egsz s egy vals):void g(int x, double y);
4Ugyanaz mint: void g(int, double);
4Tmb tpus paramter:
void h(int t[]);4Ekkor, az elsindex felshatra elmaradhat.
8.2. Fggvnyek meghvsas a visszatrtett rtk
7/25/2019 C programozasi alapok
112/152
C programozs 112
4Fggvnymeghvs
4Visszatrs a fggvnybl
Fggvnymeghvs
7/25/2019 C programozasi alapok
113/152
C programozs 113
4Klnll utastsknt:nv(aktulis paramterek listja);
4Kifejezsben, mint operandus:nv(aktulis paramterek listja)
4Ekkor a fggvny vissza kell trtsen egy rtket.Ezt hasznljuk a kifejezsben.
4A formlis s aktulis paramterek kzti
megfeleltetst ellen
rzi a fordt. Ha ezek a tpusoknem egyeznek meg, akkor a megfelelformlisparamter tpusra konvertl.
Plda fggvnymeghvsra
7/25/2019 C programozasi alapok
114/152
C programozs 114
4Fggvny deklarci (karakterlnc hossza):
int hossz(char s[]); //dimenzi elmaradhat4Ffggvnyben:
char u[]=karakter; //dimenzi elmaradhatchar v[10]=abc;printf(%d\n, hossz(u)); //eredmny: 8printf(%d\n, hossz(v)); //eredmny: 3
Visszatrs a fggvnybl
4
7/25/2019 C programozasi alapok
115/152
C programozs 115
4Hrom lehetsg:
(1) return;(2) return kifejezs;(3) a fggvny belsejeben lvutols utasts
is vgre volt hajtva.4Az (1) s (3) void fggvny esetn hasznlhat.4Az (1) esetn a return utastsnak ltalban egy
elgaz utasts (if, switch) egyik gn kellmegjelenni.
A visszaadott rtk megadsa
7/25/2019 C programozasi alapok
116/152
C programozs 116
4A void fggvnyek nem adnak vissza
rtket.4A nem void-knt deklarlt fggvnyeknek
rtket kell visszaadni.4C-ben, s rgebbi C++ fordtk esetntetszleges fggvnyre csakfigyelmeztetzenet jelenik meg.
Visszatrsi rtk
4 kif j
7/25/2019 C programozasi alapok
117/152
C programozs 117
4return kifejezs;4
Akkor hasznlhat, ha a fggvny nemvoid tpust trt vissza.4A kifejezs rtkt adja vissza.4Ha a kifejezs tpusa klnbzik a
fejlcben megadott tpustl, akkor a
fordt a deklarciban megadott tpusrakonvertlja.
8.3. Paramtertads
4
7/25/2019 C programozasi alapok
118/152
C programozs 118
4Plda
4Paramtertads a C-ben4Cm szerinti paramtertads
megvalstsa a C-ben4Tmbkkel4
Mutatkkal
A cserl fggvny
id l(i t i t b)
7/25/2019 C programozasi alapok
119/152
C programozs 119
void cserel(int a, int b)
{ int x;x = a;a = b;b = x;
}4Krds: valban csert fog vgezni?
A ffggvny
void main() 4T l
7/25/2019 C programozasi alapok
120/152
C programozs 120
void main(){
int u = 3;int v = 5;
cserel(u, v);printf(u=%d\tv=%d\n, u, v);}
4Kimenet: u=3 v=54Teht nem trtnt csere.
b
a
u
v
4Trols:
Lehetsges megoldsok
4M lt t tj k f t
7/25/2019 C programozasi alapok
121/152
C programozs 121
4Megvltoztatjuk a fggvny nevt:
cserl helyett nemcserl.4C-ben:4
mutatkat vagy tmbket hasznlunk.
Paramtertads a C-ben
4Mindig tk s e inti
7/25/2019 C programozasi alapok
122/152
C programozs 122
4Mindig rtk szerinti.4
Az aktulis s formlis paramterek klnbzhelyeken vannak trolva a memriban.4A formlis paramterek megvltozsa nincs
hatssal az aktulis paramterekre.4A fggvny meghvsakor az aktulis
paramterek tadjk az rtkket a formlisparamtereknek, s ez az rtkads egyirny.
Cm szerinti paramtertadsmegvalstsa tmbkkel
void cserel tomb(int t[])
7/25/2019 C programozasi alapok
123/152
C programozs 123
void cserel_tomb(int t[]){
int x;x = t[0];
t[0] = t[1];t[1] = x;}
4A fggvny kicserli egyms kzt az aktulisparamterknt megadott tmb elskt elemt.
Tmb paramterek
4F fggvnyben: 4Indokls:
7/25/2019 C programozasi alapok
124/152
C programozs 124
4Ffggvnyben:
int m[2];m[0] = 3;m[1] = 5;cserel_tomb(m);
4Valban csere
trtnik.
4Indokls:4
t formlis paramter,4m aktulis paramter.
t
t[0]t[1]m
Cm szerinti paramtertadsmegvalstsa mutatkkal
void cserel p(int *p int *q) // pointerekkel
7/25/2019 C programozasi alapok
125/152
C programozs 125
void cserel_p(int *p, int *q) // pointerekkel
{ int x;x = *p;*p = *q;*q = x;
}4Az aktulis paramter egy cm kell legyen.
Mutat tpus paramterek
4F fggvnyben: 4Trols:
7/25/2019 C programozasi alapok
126/152
C programozs 126
4Ffggvnyben:
int u = 3;int v = 5;cserel_p(&u, &v);
4Valban csere trtnik.4p, q formlis paramter4&u, &v (u s v cme)
aktulis paramter.
p
v, *qq
4Trols:
u, *p&u
&v
8.4. Fggvnyekrehivatkoz mutatk
4Egy fggvny cmt tadhatjuk egy olyan
7/25/2019 C programozasi alapok
127/152
C programozs 127
Egy fggvny cmt tadhatjuk egy olyanmutatnak, amely a fggvnyre hivatkozik.4Pldul:double f_negyzet(double x) { return x*x; }
void main() {double (*g)(double); // mutat egy fggvnyreg = &sin; // a math.h fejllomnybl
g = f_negyzet; // a cm opertor (&) elmaradhat}
9. Struktrk s tpusok
7/25/2019 C programozasi alapok
128/152
9. Struktrk s tpusok
9 1 Struktradeklarci s hivatkozs az
7/25/2019 C programozasi alapok
129/152
C programozs 129
9.1. Struktradeklarci s hivatkozs az
adattagokra9.2. Tpusdeklarcik
9.3. Unik9.4. Bitmezk
9.5. A felsorol tpus9.6. nhivatkoz struktrk
9.1. Struktradeklarci shivatkozs az adattagokra
4ltalnos alakja:
7/25/2019 C programozasi alapok
130/152
C programozs 130
ltalnos alakja:
struct nv {deklarcik} nevek_listja;
4A nevek_listja s a nv is elmaradhat, de nemegyszerre.
4A nevek_listja struktra tpus vltoznevekblll. Vesszvel vlasztjuk el ket.
4A nv a struktra neve.
Plda struktrra
struct konyv {
7/25/2019 C programozasi alapok
131/152
C programozs 131
struct konyv {
char szerzo[30];char cim[50];
char kiado[30];int oldalszam;
} x, y;4Az x s y struktra tpus vltoz lesz.
adattagok
A struktra tpus
4A C-ben a struct nv egy tpusnv.
7/25/2019 C programozasi alapok
132/152
C programozs 132
A C ben a struct nv egy tpusnv.4
A C++-ban a nv nllan is hasznlhat (astruct kulcssz nlkl).4Plda (C-ben):
struct konyv u;struct konyv *p;
Az adattagokra valhivatkozs
4Tagkivlaszt opertor: vltoznv.tag.
7/25/2019 C programozasi alapok
133/152
C programozs 133
Tagkivlaszt opertor: vltoznv.tag.4
Plda: printf(%s, u.szerzo);4Struktra-mutat opertor: vltoznv->tag.
Ugyanaz mint: (*vltoznv).tag.4Plda:
printf(%d\n, p->oldalszam);printf(%d\n, (*p).oldalszam);
9.2. Tpusdeklarcik
4Alakja:
7/25/2019 C programozasi alapok
134/152
C programozs 134
typedef tpus sajt_tpus_nv;4A tpus egy lteztpus neve kell legyen.4A sajt _tpus_nv ezt kvten a tpus helyett
hasznlhat.4Plda:
typedef float valos;
...valos x, y;
A struktra s a typedef
typedef struct konyv {
7/25/2019 C programozasi alapok
135/152
C programozs 135
yp y {
...} KONYV;...
KONYV a, b;4Ennek csak a C-ben van rtelme.
4A C++-ban a konyv egy nll tpusnv.
Ms pldk
typedef int *pint;
7/25/2019 C programozasi alapok
136/152
C programozs 136
typedef int pint;
typedef double (*mf)(double);pint p; // int tpusra hivatkoz mutat
int x = 20;p = &x;
mf g; // mutat egy fggvnyhezg = sin;
9.3. Unik
4Ms nven: union tpusok.
7/25/2019 C programozasi alapok
137/152
C programozs 137
4Ugyanazon a memriaterleten klnbztpus vltozk trolhatk.4A struktrkhoz hasonlan deklarljuk, de a
struct helyett az union kulcsszt hasznljuk.4Az unik tagjai kzl egyszerre csak egyhasznlhat.4
A C++-ban az uni utni nv nll tpusnv, aC-ben a union kulcsszt is kell hasznlni.
9.4. Bitmezk
4Egy struktra tagjai
7/25/2019 C programozasi alapok
138/152
C programozs 138
tpus meznv: hosszsg_bitekben;4alakak lehetnek. Ekkor a meznv annyi bitre
vonatkozik, amennyit a hosszsgban
megadtunk.4A meznv elmaradhat, ha bizonyos bitekrenem akarunk hivatkozni.4
A tpus ltalban unsigned, de lehet int, bool,unsigned char vagy char is.
Plda unira s bitmezre
union { u.x egy egszb1 l b t
7/25/2019 C programozasi alapok
139/152
C programozs 139
int x;struct {
unsigned b1 : 8;
unsigned b2 : 8;unsigned b3 : 8;unsigned b4 : 8;
} y;} u;
u.y.b1 az elsbyte
9.5. A felsorol tpus
4Ms nven: felsorols tpus. Alakja:
7/25/2019 C programozasi alapok
140/152
C programozs 140
enum nv {nevek_listja} vltoznevek_listja;4Az egsz szmokhoz jellemzneveket rendel.4Az elsnv zr lesz, ha mskppen meg nem
adjuk.4A tbbi nvhez a kvetkezszmokat rendeljk
nvekvsorrendben.
4Ha ms rtket akarunk, akkor a nv = k1 alakothasznljuk, ahol k1 egy konstans kifejezs.
Plda felsorol tpusra
enum torpe {Hofeherke, Tudor, Vidor, Hapci,
7/25/2019 C programozasi alapok
141/152
C programozs 141
Szende, Szundi, Morgo, Kuka};4A C-ben az enum torpe egy tpus, a C++-ban a
torpe nmagaban is hasznlhat.
enum torpe t;t = 5; // helyes a C-ben, hibs a C++-ban.
t = Szundi; // helyes a C-ben, s a C++-ban is.
9.6. nhivatkoz struktrk
4Ms nven: rekurzv mdon definilt struktrk.
7/25/2019 C programozasi alapok
142/152
C programozs 142
4
Egy struktrn bell nem adhatunk megugyanolyan tpus struktrt adattagknt.4Egy adattag lehet mutat ahhoz a struktrhoz,
amelyben definiljuk.4Ez a rekurzivits lehet indirekt is.4
Klnbz
adatszerkezetek definilsrahasznlhatjuk.
Plda nhivatkoz struktrra
4Direkt rekurzivits:
7/25/2019 C programozasi alapok
143/152
C programozs 143
struct nv {// ...struct nv *p;
// ...};
4Egyszeresen lncolt lista esetn hasznlhatjuk.
Indirekt nhivatkozs
struct n1; // elzetes, nem teljes deklarcit t 2 {
7/25/2019 C programozasi alapok
144/152
C programozs 144
struct n2 {
struct n1 *x;// ...
};struct n1 {
struct n2 *y;
// ...};
Az n2 struktrbanhivatkozunk n1-re, s
fordtva, az n1-ben n2-re.
Egyszeresen lncolt lista
4A lista minden eleme kt rszbl ll:
7/25/2019 C programozasi alapok
145/152
C programozs 145
4
inf: informcis rsz (egy adat),4kov: mutat a kvetkezlistaelemre.
4A lista:inf kov
els ... 0
A struktra C-ben
struct elem {
7/25/2019 C programozasi alapok
146/152
C programozs 146
int inf;struct elem *kov;
};4Mutat az elselemre:
elem *elso;
A ltrehozs
4rjunk fggvnyt, amely egyetlen elembl
7/25/2019 C programozasi alapok
147/152
C programozs 147
ll listt hoz ltre.4Az informcis rsz legyen: -1.4
A mutat a kvetkez
elemre legyen: 0.4A fggvnynek paramterknt adjuk t amutatt az elselemre.
A ltrehozs C-ben
void letrehoz_C(struct elem * *elso){
7/25/2019 C programozasi alapok
148/152
C programozs 148
{
*elso = (struct elem *)malloc(sizeof(struct elem));(*elso)->inf = -1;(*elso)->kov = 0;
}4A meghvs:
struct elem *elso;letrehoz_C(&elso);
Tpusdeklarcival C-ben
typedef struct elem *pelem;void letrehoz CT(pelem *elso) {
7/25/2019 C programozasi alapok
149/152
C programozs 149
void letrehoz_CT(pelem *elso) {*elso = (pelem)malloc(sizeof(struct elem));(*elso)->inf = -1;
(*elso)->kov = 0;}4A meghvs:
pelem elso;letrehoz_CT(&elso);
10. llomnykezels
10.1. C stlus llomnykezels4
7/25/2019 C programozasi alapok
150/152
C programozs 150
4Alacsonyszintllomnykezels4Magasszintllomnykezels
10.2. llomny-folyamok (C++-ban)
Alacsonyszintllomnykezels
4int open(const char *utvonal, int hozzaferes);4
7/25/2019 C programozasi alapok
151/152
C programozs 151
4
a visszatrtett rtk jellemzi az llomnyt4creat4read
4write4lseek
4close
Magasszintllomnykezels
4FILE* fopen(const char* utvonal, const char* mod);4putc
7/25/2019 C programozasi alapok
152/152
C programozs 152
putc4getc4fclose4fgets, fputs4fscanf, fprintf4fseek, ftell4
fread, fwrite4unlink