Uvod u računarstvo 2+2

Слични документи
Uvod u računarstvo 2+2

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Uvod u računarstvo 2+2

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

070-ALIP2-udzbenik.indb

Funkcije predavač: Nadežda Jakšić

Microsoft Word - 11 Pokazivaci

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Programski jezik C

Programiranje 1 5. predavanje dodatak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 5. predavanj

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

PowerPoint Presentation

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Programski jezik C

Tutoring System for Distance Learning of Java Programming Language

Grananje u programu predavač: Nadežda Jakšić

Uvod u računarstvo 2+2

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2016, 10. predavanje p. 1

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

MergedFile

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

Programiranje za UNIX Okruženje unix procesa

Datoteke predavač: Nadežda Jakšić

Microsoft PowerPoint - 11.Programski_Jezik_C_ulaz-izlaz [Compatibility Mode]

Tutoring System for Distance Learning of Java Programming Language

Računarski praktikum I - Vježbe 01 - Uvod

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Programski jezici i strukture podataka

Programiranje 1 3. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2017, 3. predavanje p. 1/1

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

PowerPoint Presentation

Microsoft PowerPoint - C-4-1

07_PJISP_II_Predavanja

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Računarski praktikum I - Vježbe 09 - this, static

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Osnovni programiranja I

MJEŠOVITA SREDNJA TEHNIČKA ŠKOLA TRAVNIK PROGRAMIRANJE I PROGRAMSKI JEZICI PROGRAMSKI JEZIK C -SKRIPTA ZA INTERNU UPOTREBU-

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature opti

PROMENLJIVE, TIPOVI PROMENLJIVIH

Programiranje predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 12. predavanje p. 1

Oblikovanje i analiza algoritama 5. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb OAA 2017, 5. pr

Programiranje 1 3. predavanje prošireno Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 3. predava

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Objektno orjentirano programiranje

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Tutoring System for Distance Learning of Java Programming Language

Strukture predavač: Nadežda Jakšić

Programiranje 2 1. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 1. predavanje p. 1/7

Microsoft Word - 02 Elementi programskog jezika Pascal

Programiranje 1 IEEE prikaz brojeva sažetak Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, IEEE p

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

PowerPoint Presentation

Fortran

P11.2 Izbor instrukcija, IBURG

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

P1.2 Projektovanje asemblera

3.Kontrlne (upravlja~ke) strukture u Javi

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

` 1.Врсте меморије На основу начина чувања података делимо их на меморије које привремено чувају податке (док је рачунар укључен) и меморије које трај

Sveucilište u Zagrebu

Programiranje 2 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević February 23, 2008

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević January 23, 2008

P3.2 Paralelno programiranje 2

Uvod u takmičarsko programiranje

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

Uvod u PHP

P11.3 Analiza zivotnog veka, Graf smetnji

Računarski praktikum I - Vježbe 11 - Funktori

NIZOVI

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

Algoritmi i arhitekture DSP I

PowerPoint Presentation

studirko.com predstavlja: Večernja škola C# za FPZ ( ) v 4.0 Za studirko.com napisao: Slaven Špigl

P9.1 Dodela resursa, Bojenje grafa

PowerPoint Presentation

SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Ivana Šore REKURZIVNOST REALNIH FUNKCIJA Diplomski rad Voditelj rada: doc.

PowerPoint Presentation

Sadržaj 1 Diskretan slučajan vektor Definicija slučajnog vektora Diskretan slučajan vektor

Elementarna matematika 1 - Oblici matematickog mišljenja

Microsoft Word - ZadaciBacktrackingKombinatorika.doc

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Slide 1

Datum: 20

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

Zbirka resenih zadataka iz arhitekture racunara

Транскрипт:

Pokazivači Pointeri

Definicija pokazivača Pokazivač na tip je varijabla koja sadrži adresu varijable tipa tip. Definicija pokazivača: mem_klasa tip * p_var; Primjer: static int * pi; double *px; char* pc; int a, *b; float* pf, f;

Operatori & i * Adresni operator (&): &x je adresa varijable x. Operator dereferenciranja (*): *p_x je vrijednost spremljena u memorijsku lokaciju na koju p_x pokazuje. Primjer: int i = 5; int *pi = &i; i = 2 * (*pi + 6); printf("i = %d, adresa od i = %p\n", i, pi); /* i = 22, adresa od i = 0012FED4 */

Pokazivači i funkcije Pokazivači mogu biti argumenti funkcije. U tom slučaju funkcije može promijeniti vrijednost varijable na koju pokazivač pokazuje: void zamjena(int *x, int *y){ } Aritmetičke operacije nad pokazivačima trebaju biti konzistentne (imati smisla). Svakom pokazivaču moguće je dodati i oduzeti cijeli broj. Ako je px pokazivač i n varijabla tipa int, onda su dozvoljene operacije: ++px --px px + n px - n

Operacije nad pokazivačima Primjer: int main(void) { } double x[]={10.0, 20.0, 30.0, 40.0}, *px; px = &x[0]; printf("%d\n", px); /* 6356696 */ printf("%g, %g \n", *px+1, *px+2); /* 11, 12 */ printf("%d\n", px); printf("%g, %g \n", *px++, *++px+2); /* 20, 22 */ printf("%d\n", px); return 0;

Operacije nad pokazivačima (2) nova_adresa = stara_adresa + (sizeof(tip_podatka)*broj) Primjer: char *pc; /* 1000 */ int *pi; /* 1000 */ double *pd; /* 1000 */ pc++; pi++; pd++;

Operacije nad pokazivačima (3) Primjer: int a[] = {1, 2, 3, 4}; int *pi, *pj; pi = &a[0]; pj = &a[2]; printf("%d\n", pi); /* 2686712 */ printf("%d\n", pj); printf("%d\n", pj - pi); printf("%d\n", *pj - *pi);

Uspoređivanje pokazivača Pokazivače istog tipa možemo uspoređivati pomoću relacijskih operatora. Takva operacija ima smisla ako pokazivači pokazuju na isto polje: px < py px > py px == py px!= py Sljedeće dvije petlje su ekvivalentne: int i, *pi, x[10]; for(i = 0; i < 10; i++) x[i] = i; for(i = 0, pi = &x[i]; pi <= &x[9]; pi++, i++) *pi = i;

Pokazivači i cijeli brojevi Pokazivaču nije moguće pridružiti vrijednost cjelobrojnog tipa, osim nule. Nula nije legalna adresa; ona označava da pokazivač nije inicijaliziran: double *p = 0; ili #define NULL 0 double *p = NULL; Simbolička konstanta NULL definirana je u <stdio.h>.

Primjer: Važnost prioriteta int main(void) { int x[3] = {10, 20, 30}; int *px; px = x; /* 0012FECC */ printf("%d, %p\n", *px+1, px); /* 11, 0012FECC */ printf("%d, %p\n", ++*px, px); /* 11, 0012FECC */ printf("%d, %p\n", *px++, px); /* 11, 0012FED0 */ } return 0;

Razlika pokazivača Pokazivači se mogu oduzimati ukoliko pokazuju na isto polje. Ako su px i py dva pokazivača, onda je py-px+1 broj elemenata između px i py, uključujući i krajeve: int d(int a[]){ int *pa = a; while(*pa!= 0) pa++; return pa - a; } int x[5] = {3, 2, 0, 0, 4}; printf("%d\n", d(x));

Pridruživanje Pokazivači na različite tipove podataka ne mogu se pridruživati bez eksplicitne konverzije: char *pc; int *pi; pi = pc; /* Greška */ pi = (int *) pc; /* Ispravno */

Generički pokazivač Pokazivač može biti generiran i kao pokazivač na void tada govorimo o generičkom pokazivaču: void *p; Pokazivač na bilo koji tip može se konvertirati u pokazivač na void i obratno: double *pd0, *pd1; void *p; p = pd0; pd1 = p;

Generički pokazivač (2) Osnovna uloga generičkog pokazivača je da omogući funkciji uzimanje pokazivača na bilo koji tip podatka. Primjer: double *pd0; int *pd1; void f(void *); f(pd0); f(pd1);

Pokazivači i jednodimenzionalna polja Ime jednodimenzionalnog polja je konstantni pokazivač na prvi element polja! Primjer: int a[10], b[10]; a = a+1; /* Greška, a je konstantni pokazivač. */ b = a; /* Greška! */

Pokazivači i jednodimenzionalna polja (2) Primjer: int a[10], *pa; pa = a; /* ekvivalentno je s pa = &a[0]; */ pa = pa + 2; /* nije pogreška - &a[2] */ pa++; /* &a[3] */ Primjer: int a[10], *pa; pa = &a[0]; *(pa + 3) = 20; /* ekvivalentno je s a[3] = 20; */ *(a + 1) = 10; /* ekvivalentno je s a[1] = 10; */

Polje kao argument funkcije Funkciju f koja uzima polje v tipa tip možemo deklarirati kao f(tip v[]); ili f(tip *v); Ispravni su sljedeći pozivi funkcije f: char z[100]; void f(char *); f(z); f(&z[0]);

Polja pokazivača pp je polje od 10 pokazivača na int: int *pp[10]; Primjer: char *boje[ ] = {"crvena", "zelena", "plava"}; printf("%s\n", boje[1]); printf("%c\n", boje[1][3]); printf("%c\n", *(boje[1] + 3)); pp je pokazivač na cjelobrojno polje od 10 elemenata: int (*pp)[10];

Pokazivači i dvodimenzionalna polja Primjer: int a[2][3] = {{1,2,3},{4,5,6}}, *pa; pa = a; /* ekvivalentno je s pa = &a[0][0]; */ pa = pa+3; printf("%d\n", *pa); /* 4 */ printf("%d\n", *(a[1])); /* 4 */ a[i][j] *(a[i]+j) *(*(a + i) + j) Dvodimenzionalno polje kao argument funkcije: void funkcija(int (*a)[max_n], int n, int m);

Dinamičko rezerviranje memorije Memoriju možemo dinamički alocirati pomoću funkcija: void *malloc(size_t n); void *calloc(size_t n, size_t b); malloc alocira blok memorije od n bajtova. calloc alocira memoriju za n elemenata od kojih je svaki veličine b bajtova. Alocirano područje inicijalizirano je nulom. Obje funkcije vraćaju pokazivač na blok memorije ili NULL ukoliko zahtjev za memorijom nije mogao biti ispunjen.

Primjer: Funkcija malloc double *p; p = (double *) malloc(128*sizeof(double)); if(p == NULL){ } printf("greška! Alokacija nije uspjela.\n"); exit(-1); /* Memorija više nije potrebna. */ free(p);

Funkcija free Alociranu memoriju, kada nam više ne bude potrebna, možemo osloboditi pomoću funkcije free: void free(void *blok); Funkcija free uzima pokazivač na početak alocirane memorije.

Primjer: #include <stdio.h> #include <stdlib.h> int main ( ) { int *a; int i, n, zbroj; printf ("Učitaj broj elemenata polja a:"); scanf ("%d", &n); if((a=(int*) calloc (n, sizeof(int))) == 0){ printf ("Alokacija nije uspjela. \n"); exit(-1); }

Primjer:(2) for (i = 0; i< n; ++i){ printf ("Upiši elemenat polja:"); scanf("%d", &a[i]); } zbroj = 0; for (i = 0; i< n; ++i) zbroj = zbroj + a[i]; printf("%d\n", zbroj); free(a); } return 0;