Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.

Podobné prezentace


Prezentace na téma: "Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje."— Transkript prezentace:

1 Ukazatele, řetězce Přednáška č. 3

2 Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje  Syntaxe definice ukazatele: * ; * ;  Příklad definice ukazatele na objekt typu int: int* MujPtr; nebo int *MujPtr;

3 Ukazatele(1)  Lokální proměnné se ukládají na zásobník (blok paměti) od vyšší hodnoty směrem k nižší int a = 5;// lokalni promenna a int b = 8;// lokalni promenna b int* MyPtr;// definice ukazatele na typ int s nazvem MyPtr

4 Ukazatele(2) MyPtr = &a; *MyPtr = 9;

5 Ukazatele(3)  Článek o ukazatelích v C++: http://www.elektrorevue.cz/clanky/06029/in dex.html

6 ASCII tabulka  Podle ní jsou reprezentovány znaky v řetězci

7 Řetězce ukončené znakem NULL (1)  NTS ( Null Terminated Strings )  Pole znaků (char) ukončené znakem NULL (ASCII hodnota 0). Pole proto zabírá v paměti o jeden znak více než je zobrazitelných znaků.  Proměnná, kterou považujeme za řetězec je ve své podstatě ukazatel na první znak řetězce

8 Řetězce ukončené znakem NULL (2)  Konstantní ukazatele  nelze měnit kam ukazují  pomocí sizeof(a) lze zjistit velikost alokovaného místa  jde v podstatě o pole znaků  vždy se alokuje místo pro uložení znaků řetězce char a[8]; // ukazuje na rezervovany, ale nepredvyplneny obsah char b[]="1234"; // ukazuje na rezervovany a predvyplneny obsah, velikost // pole se doplni automaticky char c[5]="1234"; // ukazuje na rezervovany a predvyplneny obsah char d[] = {'1','2','3','4'}; // !!!chyba - neni retezec ukonceny nulou char e[] = {'1','2','3','4','\0'}; // ukazuje na rezervovany a predvyplneny // obsah, velikost pole se doplni automaticky char f[5] = {'1','2','3','4'}; // v poradku, protoze zbytek pole se doplni // nulami

9 Řetězce ukončené znakem NULL (3)  Proměnné ukazatele  lze měnit kam ukazují  nelze zjistit velikost alokovaného místa pomocí sizeof(g), sizeof(g) vrací jen velikost ukazatele tedy 4B  jde o ukazatel na znak  místo pro uložení znaků řetězce se nealokuje, musíme přiřadit ukazatel na místo s alokovaným obsahem char *g; // nezinicializovany ukazatel, nevytvori zadne rezervovane misto char *h = "1234"; // inicializovany ukazatel, ukazuje na misto v pameti // obsahujici 5 znaku 1234NULL char bufA[5], bufB[12]; // alokace mista char *strA = &bufA, *strB = bufB; // inicializace promennych ukazatelu tak // aby ukazovaly na rezervovane misto

10 Řetězce ukončené znakem NULL (4)  Přístup k jednotlivým znakům řetězce  Index znaku počítán od nuly (index 0 znamená 1. pozice - tzv. zero based index)  Pozor na index mimo rozsah! char chSecond1 = a[1]; char chSecond2 = *(a+1);

11 Operace s řetězci #include int main(int argc, char* argv[]) { char vstup[20] = "ABCDE"; char vystup[20]; int n, delka; delka = 5; // strlen(vstup); for( n=0; n<delka; n++) // odzadu vystup[delka-n-1] = *(vstup+n); vystup[delka] = '\0'; printf( "%s\n", vystup); for( n=0; n<delka; n++) // na mala pismena vystup[n] = vstup[n]+32; // v ASCII jsou mala a velka pismena od sebe o 32 vystup[delka] = '\0'; printf( "%s\n", vystup); getchar(); return 0; }

12 Knihovna pro vstup a výstup Knihovna pro vstup a výstup  #include  #include  Vstupem je klávesnice, výstupem konzolové okno #include int main(int argc, char* argv[]) { char a[20]; char c; puts("Zadej znak:"); // Tisk neformatovaneho retezce fflush(stdin); // Vyprazdneni vstupniho bufferu c = getchar(); // Cteni znaku z klavesnice puts("Znak byl:"); putchar(c); // Tisk jednoho znaku puts("\nZadej retezec:"); fflush(stdin); gets(a); // Cteni retezce z klavesnice puts("Retezec byl:"); puts(a); fflush(stdin); getchar(); return 0; }

13 Knihovna pro práci s řetězci Knihovna pro práci s řetězci  #include  #include  Pozor na velikost alokovaneho mista u funkci strcpy() a strcat()!!! #include int main(int argc, char* argv[]) { char a[20] = "ABCDE"; char b[] = "New"; char *c; int iLen = strlen(a); // vraci delku retezce (pozor neplest s velikosti // alokovaneho mista) int iSize = sizeof(a); // vraci velikost alokovaneho mista strrev( a ); // prehodi retezec pozpatku strlwr( a ); // zameni velka pismena za mala strcpy( a, b ); // zkopiruje obsah retezce b do a (znak po znaku az po NULL) strncpy( a, b, 2 ); // zkopiruje prvni 2 znaky retezce b do a bez znaku NULL! strcat( a, "York" ); // pripoji retezec "York" k retezci a (znak po znaku az // po NULL), a musi byt dostatecne velke c = strchr( a,'Y'); // vraci ukazatel na pozici kde naleznul první vyskyt Y c = strstr( a, "York"); // vraci ukazatel na pozici kde naleznul první vyskyt York printf("a=%s b=%s c=%s Pozice=%d", a, b, c, c-a); getchar(); return 0; }


Stáhnout ppt "Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje."

Podobné prezentace


Reklamy Google