C programozasi alapok

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