You are on page 1of 14

ПРОГРАМСКИ ЈАЗИЦИ IV4

null pointer
НУЛТИ ПОКАЖУВАЧ
 Секогаш е добра практика да му го доделите
покажувачот NULL на променливата на покажувачот
во случај да немате точна адреса која треба да биде
доделена.
 Ова е направено за време на декларација на
променливата.
 Покажувачот што е доделен NULL се нарекува нулти
покажувач.
 Покажувачот NULL е константа со вредност нула,
дефинирана во неколку стандардни библиотеки,
вклучувајќи iostream.
#include <iostream>

using namespace std;


int main () {
int *ptr = NULL;
cout << "The value of ptr is " << ptr ;

return 0;
}
 Кога горенаведениот код е компајлиран и извршен, тој
го произведува следниот резултат:

The value of ptr is 0

 На повеќето оперативни системи, програмите немаат


пристап до меморијата со адреса 0, бидејќи таа
меморија е резервирана од оперативниот систем.
 Сепак, мемориската адреса 0 има посебно значење; тоа
сигнализира дека покажувачот не е наменет да
посочува на достапна мемориска локација.
 Но, по договор, ако покажувачот ја содржи нулта
вредност, се претпоставува дека нема да укаже
ништо.

 За да проверите за NULL покажувач, може да го


користите if исказот:

if(ptr) // succeeds if p is not null


if(!ptr) // succeeds if p is null
ОПЕРАТОРИ ЗА ПОКАЖУВАЧИ

 Како што објаснивме, покажувачот е адреса која е


нумеричка вредност; затоа, можете да вршите
аритметички операции на покажувачот исто како што
можете да ја нумерирате.
 Постојат четири аритметички оператори кои можат да
се користат со покажувачи: ++, -, +, и -
INCREMENTING A POINTER

 Во програмата користиме покажувач наместо низа


бидејќи променливиот покажувач може да се
зголеми, за разлика од името на низата кој не може да
се зголеми, бидејќи е постојан покажувач.
 Следната програма го зголемува покажувачот на
променливата за да пристапи до секој следен елемент
на низата :
#include <iostream>

using namespace std;


const int MAX = 3;

int main () {
int var[MAX] = {10, 100, 200};
int *ptr;

// let us have array address in pointer.


ptr = var;

for (int i = 0; i < MAX; i++) {


cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl; // point to the next location ptr++;
}

return 0;
}
 Кога горенаведениот код е компајлиран и извршен,
тој го произведува резултатот:

Address of var[0] = 0xbfa088b0


Value of var[0] = 10
Address of var[1] = 0xbfa088b4
Value of var[1] = 100
Address of var[2] = 0xbfa088b8
Value of var[2] = 200
DECREMENTING A POINTER
#include <iostream>

using namespace std;


const int MAX = 3;

int main () {
int var[MAX] = {10, 100, 200};
int *ptr;

// let us have address of the last element in pointer.


ptr = &var[MAX-1];
for (int i = MAX; i > 0; i--) {
cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl;

// point to the previous location


ptr--;
}

return 0;
}
 Кога кодот ќе биде компјлиран и извршен ќе го даде
следниот резултат:

Address of var[3] = 0xbfdb70f8


Value of var[3] = 200
Address of var[2] = 0xbfdb70f4
Value of var[2] = 100
Address of var[1] = 0xbfdb70f0
Value of var[1] = 10
POINTER COMPARISONS

 Покажувачите може да се споредуваат со користење


на релациони оператори, како што се ==, <, и >. Ако
p1 и p2 укажуваат на променливи кои се поврзани
една со друга, како што се елементите од истата низа,
тогаш p1 и p2 може да се споредат значајно.

 Следната програма го модифицира претходниот


пример со зголемување на покажувачот на
променливата сè додека адресата што ја посочува е
помала или еднаква на адресата на последниот
елемент од низата, што е & var [MAX - 1] -.
#include <iostream>

using namespace std;


const int MAX = 3;

int main () {
int var[MAX] = {10, 100, 200};
int *ptr;

// let us have address of the first element in pointer.


ptr = var;
int i = 0;

while ( ptr <= &var[MAX - 1] ) {


cout << "Address of var[" << i << "] = ";
cout << ptr << endl;
cout << "Value of var[" << i << "] = ";
cout << *ptr << endl;

// point to the previous location


ptr++;
i++;
}

return 0;
}
 Кога кодот ќе биде компајлиран и извршен, тој го
произведува резултатот:

Address of var[0] = 0xbfce42d0


Value of var[0] = 10
Address of var[1] = 0xbfce42d4
Value of var[1] = 100
Address of var[2] = 0xbfce42d8
Value of var[2] = 200

You might also like