Programozás I gyakorlat. 10. Stringek, mutatók

Hasonló dokumentumok
Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Mutatók. Dr. Bécsi Tamás 7. Előadás

Struktúrák (struct) A struktúra szerkezetét meghatározó deklaráció általános formája:

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Járműfedélzeti rendszerek II. 3. előadás Dr. Bécsi Tamás

10. gyakorlat. Pointerek Tárolási osztályok

A C programozási nyelv III. Pointerek és tömbök.

A C programozási nyelv III. Pointerek és tömbök.

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

7/8. gyakorlat Karaktertömbök és sztringkezelés

5. gyakorlat. Konstansok Tömbök Stringek

Programozás I gyakorlat

C memóriakezelés. Mutató típusú változót egy típus és a változó neve elé írt csillag karakterrel hozhatjuk létre.

Mutatók és mutató-aritmetika C-ben március 19.

Programozás I gyakorlat

8. gyakorlat Pointerek, dinamikus memóriakezelés

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

C string műveletek (string.h alkalmazása)

Programozás C nyelven (10a. ELŐADÁS) Sapientia EMTE

1. Alapok. Programozás II

Programozás 6. Dr. Iványi Péter

Programozás alapjai 9.Gy: Struktúra 2.

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Programozás II. 2. Dr. Iványi Péter

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

Programozas 1. Strukturak, mutatok

10. gyakorlat Tömb, mint függvény argumentum

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

Programozás I gyakorlat

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

1. Egyszerű (primitív) típusok. 2. Referencia típusok

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Programozás alapjai 8.Gy: Program struktúra

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás 5. Dr. Iványi Péter

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Programozás C nyelven (10. ELŐADÁS) Sapientia EMTE

INFORMATIKA javítókulcs 2016

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

Bevezetés a programozásba I.

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

Mintavételes szabályozás mikrovezérlő segítségével

Programozási segédlet

Programozás C és C++ -ban

Programozás alapjai. 5. előadás

1. Jelölje meg az összes igaz állítást a következők közül!

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Maximum kiválasztás tömbben

Programozás II. 4. Dr. Iványi Péter

Programozás I. gyakorlat

Vezérlési szerkezetek

Programozás C++ -ban 2007/1

Programozás I. gyakorlat

Programozás C nyelven (9. ELŐADÁS) Sapientia EMTE

7. fejezet: Mutatók és tömbök

Programozás II. Fájlkezelés

INFORMATIKA tétel 2017

Ha meg akarod tudni, hogy az egyes típusok milyen méretűek a te rendszereden, a következő program megmutatja:

INFORMATIKA tétel 2019

Megoldott programozási feladatok standard C-ben

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

C++ programozási nyelv Konstruktorok-destruktorok

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Programozási Nyelvek: C++

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

C változók. Feladat: Deklaralj egy valos, egy karakter es ket egesz tipusu valtozot! int main() {

Programozás 1. Dr. Iványi Péter

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

A C programozási nyelv

10. gyakorlat Struktúrák, uniók, típusdefiníciók

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Programozás C nyelven (13. ELŐADÁS) Sapientia EMTE

A C++ nyelvben a függvény nevek túlterhelésével biztonságosabbá tehetnénk az adatok kiírását és beolvasását.

Szövegek C++ -ban, a string osztály

5. Gyakorlat. struct diak {

B I T M A N B I v: T M A N

7. gyakorlat. Fájlkezelés IO haladó Függvények haladó

INFORMATIKA tétel 2018

Feladatgyűjtemény a C programozási nyelvhez

Óbudai Egyetem. C programozási nyelv

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

Programozás C és C++ -ban

Információs Technológia

Programozási nyelvek Java

Számítógép-hálózatok: 4. Labor. TCP kliens. A gyakorlat célja:

Programozás alapjai 1. (BMEVIEEA100)

Adatszerkezetek és algoritmusok

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Átírás:

Programozás I gyakorlat 10. Stringek, mutatók

Karakter típus A char típusú változókat karakerként is kiírhatjuk: #include <stdio.h> char c = 'A'; printf("%c\n", c); c = 80; printf("%c\n", c); printf("%c\n", c + 1); Kimenet: A P Q 2

Karaktertömb Ezzel jelezzük a tömb végét #include <stdio.h> char szoveg[5] = {'a', 'l', 'm', 'a', 0; int i = 0; while (szoveg[i]!= 0) { printf("%c", szoveg[i]); i++; printf("\n"); 3

Karaktertömb, azaz string De nincs szükségünk ilyen ciklusra, mivel ezt a printf is tudja: #include <stdio.h> char szoveg[5] = {'a', 'l', 'm', 'a', 0; printf("%s\n", szoveg); 4

Karaktertömb, azaz string Egyszerűbben is inicializálhatjuk: #include <stdio.h> char szoveg[] = "alma"; printf("%s\n", szoveg); Figyelem! A tömb 5 elemű lesz, a fordító kiegészíti a lezáró 0-val. 5

String beolvasása Ha stringet olvasunk be, akkor nem kell & #include <stdio.h> char szoveg[10]; scanf("%s", szoveg); printf("%s\n", szoveg); 6

Változók helye Alap esetben minden változó a memóriában található int a = 22, b = 42; 112 113 114 115 116 117 118 119 120 121 122 543 32 22 0 0 0 42 0 0 0 563 a b 7

Mutató Olyan változó, amely memóriacímet tartalmaz int a = 12; int * mutatoa = &a; 112 113 114 115 116 117 118 119 120 121 122 543 32 12 0 0 0 114 0 0 0 563 a mutatoa 8

Mutató int típusú változó címét tároljuk int a = 12; int * mutatoa = &a; 112 113 114 115 116 117 118 119 120 121 122 543 32 12 0 0 0 114 0 0 0 563 a mutatoa 9

Mutató A * jelzi, hogy mutatót hozunk létre int a = 12; int * mutatoa = &a; 112 113 114 115 116 117 118 119 120 121 122 543 32 12 0 0 0 114 0 0 0 563 a mutatoa 10

Mutató A mutató változónak adunk egy nevet int a = 12; int * mutatoa = &a; 112 113 114 115 116 117 118 119 120 121 122 543 32 12 0 0 0 114 0 0 0 563 a mutatoa 11

Mutató Az & címképző operátor megadja az a változó memóriacímét int a = 12; int * mutatoa = &a; 112 113 114 115 116 117 118 119 120 121 122 543 32 12 0 0 0 114 0 0 0 563 a mutatoa 12

Mutató * indirekció operátor: az a változó, amire a mutató mutat int a = 12; int * mutatoa = &a; *mutatoa = 20; 112 113 114 115 116 117 118 119 120 121 122 543 32 20 0 0 0 114 0 0 0 563 a mutatoa 13

Mutatóra mutató mutató Egy int* típusú változó címét tároljuk el int a = 42; int * mutatoa = &a; int ** mutatomutatoa = &mutatoa; **mutatomutatoa = 10; 114 115 116 117 118 119 120 121 122 123 124 125 10 0 0 0 114 0 0 0 118 0 0 0 a mutatoa mutatomutatoa 14

Feladat Írj függvényt, amely megcseréli a main-ben lévő két változó értékét. #include <stdio.h> int a = 10; int b = 20; csere(? ); printf("%d %d\n", a, b); 15

Megoldás Adjuk át a két változó mutatóját: #include <stdio.h> void csere(int * pa, int * pb) { int temp = *pa; *pa = *pb; *pb = temp; int a = 10; int b = 20; csere(&a, &b); printf("%d %d\n", a, b); 16

Mutató kiírása A %p memóriacímként értelmezi a kiírandó változó bitmintáját. #include <stdio.h> int a; int b; printf("%p %p\n", &a, &b); 17

Mutatók és tömbök Ha csak a tömb nevét írom le, akkor az a kifejezés a tömb 0. elemének a címét adja meg. #include <stdio.h> int tomb[4] = {1, 2, 3, 4; int * ptr = tomb; printf("%d\n", *ptr); printf("%d\n", *tomb); 18

Mutató aritmetika A mutatóhoz hozzáadhatok 1-et: #include <stdio.h> int tomb[4] = {1, 2, 3, 4; int * ptr = tomb; ptr++; printf("%d\n", *ptr); 19

Mutató aritmetika Milyen memóriacímre fog mutatni? int tomb[4] = {1, 2, 3, 4; int * ptr = tomb; ptr++; A mutató int * típusú, azaz int-re mutat Az int mérete sizeof(int) A mutató által tárolt cím 1*sizeof(int)-el nő 20

Feladat Olvasd be, majd írasd ki a [] jel használata nélkül egy 10 elemű tömb elemeit. 21

Megoldás #include <stdio.h> int tomb[10]; int * ptr = tomb; int i; for (i = 0; i < 10; i++) { scanf("%d", ptr + i); for (i = 0; i < 10; i++) { printf("%d\n", *(tomb + i)); 22

Tömb indexelése tomb[i] = *(tomb + i) 23

Kérdés Mit ír ki az alábbi programrészlet? int tomb[4] = {1, 2, 3, 4; int * ptr = tomb; ptr += 2; printf("%d\n", ptr[1]); 24

Megoldás int tomb[4] = {1, 2, 3, 4; int * ptr = tomb; ptr += 2; printf("%d\n", ptr[1]); 0 1 2 3 1 2 3 4 tomb ptr 25

Megoldás int tomb[4] = {1, 2, 3, 4; int * ptr = tomb; ptr += 2; printf("%d\n", ptr[1]); 0 1 2 3 1 2 3 4 tomb ptr 26

Megoldás int tomb[4] = {1, 2, 3, 4; int * ptr = tomb; ptr += 2; printf("%d\n", ptr[1]); 0 1 2 3 1 2 3 4 tomb ptr ptr[1] 27

Érvénytelen memóriahivatkozás Nem férhetünk hozzá a teljes memória tartalmához! #include <stdio.h> int * ptr = 0; printf("%d\n", ptr[1]); 28

Érvénytelen memóriahivatkozás A számítógép memóriáján több program osztozik Minden program csak a saját területét érheti el! skype myprogram firefox Linux 29

Érvénytelen memóriahivatkozás Amelyik program más területet címez, azt a rendszer likvidálja skype myprogram firefox Linux 30

Stringek összehasonlítása A stringek nem C típusok, csupán tömbök, a ==,!=, >, >=, < és <= operátorok nem magukat a stringeket hasonlítják össze, hanem a kezdőcímüket! #include <stdio.h> char str1[] = "korte"; char str2[] = "korte"; if (str1 == str2) { printf("egyenloek\n"); 31

Stringek összehasonlítása Az strcmp függvényre van szükségünk (string.h) #include <stdio.h> #include <string.h> char str1[] = "korte"; char str2[] = "korte"; if (strcmp(str1, str2) == 0) { printf("egyenloek\n"); 32

Gyakran ismételt kérdések Áhá, tehát az alábbi programban a tomb az egy mutató, tehát meg is növelhetem az értékét? int tomb[2]; tomb++; NEM! Itt a tomb az egy tömb, nem mutató, ezzel hivatkozunk egy memória szakaszra. 33

Gyakran ismételt kérdések Milyen típusú az a és b változó? int * a, b; a: int * b: int Ha azt szeretnénk, hogy b is int * legyen, akkor a b elé is oda kell írni a * karaktert 34