53
Основи Основи програмирања програмирања 1 1 Лекција 5 Висока школа електротехнике и рачунарства струковних студија Београд др др Зоран Зоран Бањац Бањац [email protected]

Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

  • Upload
    dinhque

  • View
    219

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

ОсновиОснови програмирањапрограмирања 11Лекција 5

Висока школа електротехнике и рачунарства струковних студијаБеоград

дрдр ЗоранЗоран БањацБањац

[email protected]

Page 2: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац2

СадржајСадржај

Условни скокови• break• continueПоказивачи• Дефинисање показивача

– оператор &– оператор *– Дoдела почетне вредности показивачу– Генерички показивачи

• Приказивање вредности показивача

Page 3: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац3

УсловниУсловни скоковискокови

• break• continue• goto

Page 4: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац4

breakbreak

• break наредба се користи запревремено ПРЕКИДАЊЕ итеративнихпетљи (while, for и do-while), као инаредбе switch

• Уколико постоји више наредби итерације, које су уметнуте једна у другу, наредбаbreak прекида извршење само једне одњих и то оне у којој се налази

Page 5: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац5

breakbreak

for(i=0; ; ++i){...x = i-3+12*iif( x >= 500)

break;...

}...

Page 6: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац6

breakbreak

#include <stdio.h>main(){ int c;printf("Unesite karkter( x za izlaz): "); while(1) { c = getc(stdin); if (c == 'x')

break; } printf("Prekid beskonacne petlje!\n");

}

Page 7: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац7

break break -- switchswitchmain(){

int a = 1;int b = 2;switch( a+b ){case 12:

printf("Zbir je 12\n");break;

case 3:printf("Zbir je 3\n");break;

case 41:printf("Zbir je 41\n");break;

default:printf("Zbir je nepoznat\n");break;

}}

Zbir je 3

Page 8: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац8

break break -- switchswitchmain(){

int a = 1;int b = 2;switch( a+b ){case 1:

printf("Zbir je 1\n"); break;case 2:

printf("Zbir je 2\n"); break;case 3:case 4:case 5:

printf("2 < Zbir < 6\n"); break;default:

printf("Zbir je nepoznat\n"); break;}

}

2 < Zbir < 6

Page 9: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац9

continuecontinue

• Наредба continue, за разлику однаредбе break НЕ прекида извршењецелокупне наредбе итерације (while, for и do-while) већ прекида самоједну њену (тренутну) итерацију.

Page 10: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац10

continuecontinue

• Код while петље доводи до скока натестирање

• Код do-while петље доводи до скока натестирање

• Код for петље доводи до скока наizraz3 (инкремент) и izraz2(тестирање)

Page 11: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац11

continuecontinue

#include <stdio.h>main(){int x;printf("Ispis parnih brojeva do 10\n");

for( x = 1; x <= 10; x++ ){if( x % 2 != 0 )/* Ako broj nije paran */

continue; /* Idi na poсetak petlje */printf( "\n%2d", x );

}printf( "\n");

}

2 4 6 8 10

Page 12: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац12

continuecontinue#include <stdio.h>main(){

int h = 200, brojac = 0;

printf("Brojevi od %d do 0\n", h);printf("koji nisu deljivi sa 2 i 3:\n");do {if ( h%2 == 0) /* izostavi deljive sa 2 */

continue;if (h % 3 == 0) /* ... sa 3 */

continue;

printf("%5d", h), brojac++;if (brojac % 10 == 0) /* 10 u liniji */

putchar('\n');}while (h--);

}

Page 13: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац13

ПоказивачиПоказивачи

• Показивач (pointer) је градивни деопрограмског језика C који нуди већуконтролу над меморијом рачунара.

• Показивач јепроменљива која може да садржимеморијску адресу друге променљиве.

Page 14: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац14

ПоказивачиПоказивачи

• Тип податка: скуп вредности (short int од -32768 до 32767) скуп операција (сабирање, одузимање...).

• До сада поменути типови података су ималисвоје име (int, float, double...)

• Вредности које може да има податак типапоказивач су адресе меморијскихлокација.

• Тип податка показивач нема своје име.

Page 15: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац15

ПоказивачиПоказивачи

• Број бајтова које заузима Показивач је– 2 бајта– 4 бајта

• Зависи од величине меморије (опсега адреса)

За 64кВ меморијеминимална меморијска локација 1 бајт, свака локација може да се опише са 16 бита, показивач заузима 2 бајта

Page 16: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац16

ДефинисањеДефинисање показивачапоказивача

Општа синтакса је:tip_podatka *ime_pokazivaca;• tip_podatka представља тип податкачију адресу показивач (треба да) садржи.

• * обавезан знак• ime_pokazivaca идентификатор.

Пример:int *p;float *ptr;

Page 17: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац17

ДефинисањеДефинисање показивачапоказивача

int *p; int* p; int * p;• Знак * може да се постави било гдеизмеђу типа податка и имена показивача.

int* p, q;• Само p је показивач, а q није.

• Пепорука је да се знак * пише непосреднопоред имена променљиве.

int *p, *q;

Page 18: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац18

ОператориОператори заза показивачепоказиваче

• C програмски језик има два оператораза променљиве типа показивач: – оператор &– оператор *

Page 19: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац19

оператороператор &&

–одређивање адресе променљиве–додела адресе промељиве показивачу.

int main()

{

int x = 25;

int *p;

p = &x;

*p = 48;

return 0;

}

Page 20: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац20

оператороператор &&

int main(){

int x = 25;int *p;

p = &x;

*p = 48;

return 0;}

RAM

??

25

.

.

.

.

.

.

.

.

adr:1200

adr:1800

ime: p

ime: x

Вредности адреса у наредним примерима суизабране насумично!

Page 21: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац21

оператороператор &&

1800

25

.

.

.

.

.

.

.

.

.

adr:1200

adr:1800

ime: p

ime: x

int main(){

int x = 25;int *p;

p = &x;

*p = 48;

return 0;

}

p = &x чита се: у променљиву p упиши адресу(&) променљиве x

Page 22: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац22

оператороператор &&

25

.

.

.

adr:1800 ime: xadr:1801

adr:1803adr:1802

1800

.

adr:1200

adr:1202adr:1201

adr:1203

ime: p

Чува се само почетна адреса!

Променљива x(int) заузима 4 бајта меморије

Показивач рсадржи адресупрвог бајта

Page 23: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац23

оператороператор **

• Податаку у меморији, може да сеприступи применом оператора *.

• Приступање је посредно, помоћуадресе, назива се и индиректноадресирање

• Оператор * се назива операториндиректног адресирања.

Page 24: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац24

оператороператор **

adr:1800

adr:1200

1800

48

.

.

.

.

.

.

.

.

.

ime: p

ime: x

int main(){

int x = 25;int *p;

p = &x;

*p = 48;

return 0;

}

*p = 48 чита се: на адресу коју садржипоказивач p упиши вредност 48

Page 25: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац25

операториоператори

Ако је p променљива типа показивачp, &p, и *p : имају различита значења.

• p Садржај променљиве p(адреса неке друге променљиве),

• &p Адреса променљиве p,• *p Вредност меморијске локације чију

адресу садржи показивач p

Page 26: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац26

ПримерПример 11

int main(){int x;int *p;

}

adr:1750

adr:1200

??

??

.

.

.

.

.

.

.

.

.

ime: p

ime: x

?? (вредност променљиве x)x

1750 (адреса променљиве x)&x

не постоји*p

?? (вредност променљиве p)p

1200 (адреса променљиве p)&p

Page 27: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац27

ПримерПример 1 1 наставакнаставак

int main(){int x;int *p;x = 50;

}adr:1750

adr:1200

??

50

.

.

.

.

.

.

.

.

.

ime: p

ime: x

50x

1750 (адреса променљиве x)&x

не постоји*p

?? (вредност променљиве p)p

1200 (адреса променљиве p)&p

Page 28: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац28

adr:1750

adr:1200

1750

50

.

.

.

.

.

.

.

.

.

ime: p

ime: x

ПримерПример 11 наставакнаставакint main(){

int x;int *p;x = 50;p = &x;

}

50x

1750 (адреса променљиве x)&x

50 *p

1750p

1200 (адреса променљиве p)&p

Page 29: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац29

adr:1750

adr:1200

1750

38

.

.

.

.

.

.

.

.

.

ime: p

ime: x

ПримерПример 11 наставакнаставакint main(){int x;int *p;x = 50;p = &x;*p = 38;

}

38x

1750 (адреса променљиве x)&x

38*p

1750p

1200 (адреса променљиве p)&p

Page 30: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац30

ПримерПример 2 2

int main(){int *ptr1, *ptr2;int x, y;ptr1 = &x;*ptr1 = 42;ptr2 = ptr1;*ptr2 = 53;ptr1 = &y;*ptr1 = 88;return 0;}

??y1950&y??x1320&x??*ptr2??ptr22600&ptr2 ??*ptr1??ptr12350 &ptr1

Page 31: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац31

ПримерПример 2 2 наставакнаставак

int main(){int *ptr1, *ptr2;int x, y;ptr1 = &x;*ptr1 = 42;ptr2 = ptr1;*ptr2 = 53;ptr1 = &y;*ptr1 = 88;return 0;}

??y1950&y??x1320&x??*ptr2??ptr22600&ptr2??*ptr11320ptr12350 &ptr1

Page 32: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац32

ПримерПример 2 2 наставакнаставак

int main(){int *ptr1, *ptr2;int x, y;ptr1 = &x;*ptr1 = 42;ptr2 = ptr1;*ptr2 = 53;ptr1 = &y;*ptr1 = 88;return 0;}??y

1950&y42x1320&x??*ptr2??ptr22600&ptr2 42 *ptr11320ptr12350 &ptr1

Page 33: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац33

ПримерПример 2 2 наставакнаставак

int main(){int *ptr1, *ptr2;int x,y;ptr1 = &x;*ptr1 = 42;ptr2 = ptr1;*ptr2 = 53;ptr1 = &y;*ptr1 = 88;return 0;}??y

1950&y42x1320&x42*ptr21320ptr22600&ptr2 42 *ptr11320ptr12350 &ptr1

Page 34: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац34

ПримерПример 2 2 наставакнаставак

int main(){int *ptr1, *ptr2;int x, y;ptr1 = &x;*ptr1 = 42;ptr2 = ptr1;*ptr2 = 53;ptr1 = &y;*ptr1 = 88;return 0;}??y

1950&y53x1320&x53*ptr21320ptr22600&ptr2 53 *ptr11320ptr12350 &ptr1

Page 35: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац35

ПримерПример 2 2 наставакнаставак

int main(){int *ptr1, *ptr2;int x, y;ptr1 = &x;*ptr1 = 42;ptr2 = ptr1;*ptr2 = 53;ptr1 = &y;*ptr1 = 88;return 0; }??y

1950&y53x1320&x53*ptr21320ptr22600&ptr2 ?? *ptr11950ptr12350&ptr1

Page 36: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац36

ПримерПример 2 2 наставакнаставак

main(){int *ptr1, *ptr2;int x, y;ptr1 = &x;*ptr1 = 42;ptr2 = ptr1;*ptr2 = 53;ptr1 = &y;*ptr1 = 88;}88y

1950&y53x1320&x53*ptr21320ptr22600&ptr2 88 *ptr11950ptr12350&ptr1

Page 37: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац37

ДоделаДодела почетнепочетне вредностивредности показивачупоказивачу

• Почетна вредност показивача треба да буде: – адреса неког претходно дефинисаног податка; – 0 (нула).– NULL

int main( )

{

int x;

int *pokazivac = &x;

int *p2 = NULL /* moze i int *p2 = 0 */

return 0;

}

Page 38: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац38

ГенеричкиГенерички показивачипоказивачи

• Показивачи код којих није одређен тип.• Уместо типа податка (int, float, double...) ставља се резервисана речvoid

viod *point;

• Помоћу генеричких показивача нијемогуће да се приступи подацима!

Page 39: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац39

ГенеричкиГенерички показивачипоказивачи

int main(){int x;void *p = &x; /* Greska! */void *p2;

p2 = &x; /* Greska! Tip рokazivaca..*/

...

}

Page 40: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац40

ГенеричкиГенерички показивачипоказивачи

int main(){int x;void *p2;.../* p2 sadrzi adresu promenljive x */

(int *)p2=&x;

/* na adresu promenljive x upisati 3 */

*((int *)p2) = 3; /* isto sto i x=3 */}

Page 41: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац41

ПриказивањеПриказивање вредностивредности показивачапоказивача

• printf и формат %p#include<stdio.h>

int main()

{

int x;

int *px;

px = &x;

printf("Vrednost pokazivaca: %p\n", px);

return 0;

}

Page 42: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац42

ПриказивањеПриказивање вредностивредности показивачапоказивача

#include<stdio.h>int main() {int x = 5;int *px;

px = &x;printf("Vrednost x: %d\n", x);printf("Adresa od x: %p\n", &x);printf("Vrednost pokazivaca: %p\n", px);printf("Sadrzaj mem. ciju adr. sadrzi \

pokazivac: %d\n", *px);}

Vrednost x: 5

Adresa od x: 0012FF7C

Vrednost pokazivaca: 0012FF7C

Sadrzaj mem. ciju adr. sadrzipokazivac: 5

Page 43: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац43

РачунскеРачунске операцијеоперације наднад показивачимапоказивачима

• Oперације над показивачима:– додела вредности једног показивачадругом

– додавање целобројног податка навредност показивача и одузимањецелобројног податка од вредностипоказивача

– упређивање вредности два показивача– упоређивање вредности показивача санулом

Page 44: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац44

ДоделаДодела вредностивредности једногједног показивачапоказивача другомдругом

main(){double x = 1.23;double *px = &x; /* px sadrzi adresu

promenljive x */double *p1;int *p2;

p1 = px; /* p1 sadrzi adresupromenljive x */

p2 = px; /* Greska! tip */p2=(int *)px; /* Ovako moze, ali na

odgovornost programera */}

Page 45: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац45

ДодавањеДодавање ии одузимањеодузимање

• Операторима: • +• ++• +=рачуна се збир вредности показивача и целог броја,

• Операторима: • −• − −• − =рачуна сe разлика вредности показивача и целогброја.

Page 46: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац46

ДодавањеДодавање ии одузимањеодузимање

int main(){int *p;double *q;char *chPtr;...p++; /* p=p+1 povecava p za 4 bajta */q++; /* q=q+1 povecava q za 8 bajtоva */chPtr++;/* povecava chPtr za 1 bajt */p=p+2; /* povecava vrednost p za 2x4 bajtova*/...

}

Page 47: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац47

УпоређивањеУпоређивање вредностивредности двадва показивачапоказивача

• Оператори• = =• !=

• два показивача истог типа могу сеупоређивати како би се добио одговор дали показују на исти податак или не.

Page 48: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац48

УпоређивањеУпоређивање вредностивредности показивачапоказивача саса нуломнулом

• Да ли показивач садржи валидну адресу?

• Уколико показивач има вредност нула (илиNULL) онда он не показује ни на једанподатак.

• Примена симболичке константе: NULLзахтева навођење стандардне библиотеке<stdio.h>.

Page 49: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац49

ПоказивачПоказивач нана показивачпоказивач

• може да садржи адресу другог показивача

tip **ime_pokazivaca

Page 50: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац50

ПримерПример 2 2

int main(){

char a='z';char * b;char ** c;

b = &a;c = &b;return 0;

}za7320&a??**c??*c??c10502&c ??*b??b8092&b

Page 51: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац51

ПримерПример 2 2 наставакнаставак

int main(){

char a='z';char *b;char **c;

b = &a;c = &b;return 0;

}za7320&a??**c??*c??c10502&c z*b7320b8092&b

Page 52: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац52

ПримерПример 2 2 наставакнаставак

int main(){

char a='z';char *b;char **c;

b = &a;c = &b;return 0;

}za7320&az**c7320*c8092c10502&c z*b7320b8092&b

Page 53: Основипрограмирања 1 Лекција 5 · PDF filepokazivac: %d\n", *px);} Vrednost x: 5 Adresa od x: 0012FF7C Vrednost pokazivaca: 0012FF7C Sadrzaj mem. ciju adr

Зоран Бањац53

Хвала на пажњи

Питања?