11. Указатели

• Дефиниране на указател
• Действия с указатели
• Указатели и масиви
• Указатели и низове
• Указатели и структури
• Примери и задачи

преди план следва
 
 

• Указатели и масиви


В езика С/С++ има интересна връзка между указателите и масивите. Изразява се в това, че променливата масив съдържа адреса на първия елемент на масива. Тъй като масивите се разполагат в паметта от ОС, адресите им не могат да се променят, По тази причина масивът е константен указател към първия елемент на масива. Пример:
int  m[5] = {1,2,3,4,5};
int *p;
cout<< m << endl;          // извежда адреса на  m[0]
p = & m[0];
cout<<  p<< endl;          // извежда същият  адрес
cout<< *p<< endl;          // извежда 1
cout<< *m<< endl;          // извежда 1
Примерът показва, че *m и m[0] са два записа на елемента m[0]. Понеже елементите на масивите са разположени последователно в паметта, то m+1 е адресът на m[1], а *(m+1) e стойността на m[1] и т.н. Операциите ++ и - - обаче не могат да се прилагат над масивите, тъй като масивите са константни указатели. Затова кодът m++ или ++m, където m е име на масив, предизвиква грешка.

Пример: Да се изведат елементите на масив чрез индексни променливи и чрез указатели:
int  a[] = {1,2,3,4,5};
int i;
for(i=0;i <5 ;i++)
	cout<< a[i]<< "  ";       // извежда  1   2   3   4   5
cout<< endl;
for(i=0;i < 5;i++)
	cout<< *(a+i)<<"  ";      // извежда  1   2   3   4   5
 
 
 
 
преди план следва