- Член од
- 6 јуни 2009
- Мислења
- 3.094
- Поени од реакции
- 445
Ок. Прво да обајаниме што се покажувачи.
Покажувашот е всушност обичен цел број (integer) со големина на битноста на оператибниот систем (16, 32, 64 битен, итн.)
Комјутерот ја адресира меморијата. Секој бајт (8 бита) има своја адреса. која понува од 1 па до максималниот број кој тој интеџер го собира. Кај 32 битен цел број, тоа е 2^32-1, што занчи дека 32 битен ОС можи да адресира и да користи 2^32-1 бајти.
Покажувач како што рековме е цел број, кој е наменет да СОДРЖИ мемориски адреси. Кај типови кои зафаќаат повеќе од еден бајт (повеќето типови), тогаш тој ја треба да ја содржи адресата на првиот бајт од променливата од тој тип.
Има два оператори кај покажувачите, & и *.
& ставен пред некоја променлива ја враќа адресата (на првиот бајт) од таа променлива. Таа вредност се запамтува во покажувач.
Операторот * вели, пристапи на адресата која се содри во овој покажувач.
Еве како работи твојот код
Покажувашот е всушност обичен цел број (integer) со големина на битноста на оператибниот систем (16, 32, 64 битен, итн.)
Комјутерот ја адресира меморијата. Секој бајт (8 бита) има своја адреса. која понува од 1 па до максималниот број кој тој интеџер го собира. Кај 32 битен цел број, тоа е 2^32-1, што занчи дека 32 битен ОС можи да адресира и да користи 2^32-1 бајти.
Покажувач како што рековме е цел број, кој е наменет да СОДРЖИ мемориски адреси. Кај типови кои зафаќаат повеќе од еден бајт (повеќето типови), тогаш тој ја треба да ја содржи адресата на првиот бајт од променливата од тој тип.
Има два оператори кај покажувачите, & и *.
& ставен пред некоја променлива ја враќа адресата (на првиот бајт) од таа променлива. Таа вредност се запамтува во покажувач.
Операторот * вели, пристапи на адресата која се содри во овој покажувач.
Код:
int a = 5; // a се наоѓа пример на 123456789 и содржи 5
int * p1; // p1 се наоѓа на некоја друга адреса и не содржи ништо
p1 = &a; // p1 содржи број кој е адресата на а - 123456789
(*p1 == a) // ова враќа True
int * p2 = p1 //вреноста на p1 (адреса на а) се копира во p2
printf("%d", a); //печати 5
printf("%d", &а) //печати 123456789
printf("%d", p1) //печати 123456789
printf("%d", *p1) //печати 5
printf("%d", p2) //печати 123456789
printf("%d", *p2) //печати 5
Код:
{
int a=1,b=2;
int *pok1,*pok2;
pok1=&a; // pok1 прима адреса на а
pok2=&b; // pok1 прима адреса на b
*pok1=10; // променливата на адреса пок1 (таа е а) прима 10
*pok2=*p1; // променливата на адреса пок2 (таа е б) прима вредност од променливата на адреса пок1 (тоа е а). исто како да си напишал b = a; значи б е 10, исто како а
pok1=pok2; //го копираме покажувачот пок2 во пок1. двата покажуваат кон б
*pok1=20; // б прима 20
printf("%d, %d", a, b); // печати 10, 20
}