You are on page 1of 8

IV4

pointers and arrays


НИЗИ И ПОКАЖУВАЧИ

 Концептот на низата е многу врзан (поврзан) со оној на


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

int numbers [20];


int * p;
Следнава операција на доделување би била валидна:
p = numbers; //p ke pokazuva na prviot
element na nizata
 После тоа, p и броевите би биле еквивалентни и би
имале исти својства.
 Единствената разлика е во тоа што можеме да ја
смениме вредноста на покажувачот p од друга,
додека броевите секогаш ќе укажуваат на првиот од
20-те елементи од типот int со кој беше дефиниран.
 Затоа, за разлика од p, што е обичен покажувач,
броевите се низа, а низата може да се смета за
постојан покажувач.
 Затоа, следнава распределба не би била валидна:

numbers = p; //vaka ne moze


 Бидејќи броевите се низа, така што работи како
константен покажувач, и не можеме да ги доделиме
вредностите кон константите.
 Поради карактеристиките на променливите, сите
изрази кои вклучуваат насоки во следниов пример се
совршено валидни:

// p-12 Nizi i pointeri


// more pointers
#include <iostream>
using namespace std;
int main ()
{
 int numbers[5];  //se deklarira niza numbers koja sodrzi 5 celi broevi
 int * p;                    //se deklarira pokazuvac kon int
 p = numbers;        //p pokazuva na prviot element na nizata
 *p = 10;                 //tamu kade sto pokazuva p se smestuva 10                        
p++;       //p se pomestuva za 1 (seka pokazuva na vtoriot element na nizata)
*p = 20;                   //tamu kade sto pokazuva p se smestuva 20                       
 p = &numbers[2];    //p pokazuva na tretiot element (toj ima indeks 2)
 *p = 30;                  //tamu kade sto pokazuva p se smestuva 30                       
 p = numbers + 3;    // p pokazuva na pocetokot + 3 lokacii, znaci na cetvrtiot
element
*p = 40;                   //tamu kade sto pokazuva p se smestuva 40                       
 p = numbers;          // p pokazuva na prviot element
 *(p+4) = 50;           //tamu kade sto pokazuva (p+4), znaci na pettiot element
se smestuva 50
  
  //se pecati nizata
            cout<<”Nizata numbers izgleda vaka: “<<endl;
            for (int n=0; n<5; n++)
            cout << numbers[n] << ", ";
            cout<<endl;
system(“pause”);
return 0;
}
 Во поглавјето за низи користевме загради ([]) неколку
пати за да го наведеме индексот на елементот на
низата на која сакаме да ја повикаме.
 Па, оваа група оператори [] се исто така оператор за
дереференција познат како офсет оператор.
 Тие ја намалуваат променливата што ја следат само
како * , но исто така го додаваат бројот помеѓу
загради на адресата . На пример:
a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0
 Овие два изрази се еквивалентни и валидни ако a е
покажувач или ако a е низа.
 Уште една програма со низа и покажувач кон низата:

#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; //ptr pokazuva na prviot element na nizata
   for (int i = 0; i < MAX; i++)
   {
      cout << "Address of var[" << i << "] = ";
      cout << ptr << endl<<endl;
 
      cout << "Value of var[" << i << "] = ";
      cout << *ptr << endl<<endl;
 
      // point to the next location
      ptr++;
   }
system("pause");
return 0;
}

You might also like