Едномерни масиви и указатели

Указател към масив се дефинира по общоприетите правила, като се спазва изискването за еднаквост на типа на указателя и типа на масива, към който сочи указателя.

  1. float array[20];
  2. float *pa;
Името на масива се разглежда като константа, чиято стойност е адресът на първия елемент на масива.
pa = array; <=> pa = &array[0];

Тъй като елементите на масива са разположени в последователни полета в паметта, следните изрази са еквивалентни:
&array[i] <=> array + i <=> pa + i
array[i]  <=> *(array + i) <=> *(pa + i),
където i е някакъв индекс (0 <= i < 20).

На практика компилаторът заменя ползването на индекси със събиране на указатели.

Езикът C дава два начина за обръщение към елементите на масив:
-    чрез индекси
-    чрез указатели
използването на указатели е по-бързият начин.

В езика C няма операции, които да обработват низове като цяло, но за сметка на това в C има много стандартни функции, които позволяват да се извършват различни операции с низове. Тези низове се задават като указатели към низ (към първия символ на низа).

  1. char *ps;
  2. ps = “Това е низ!”; //след тази инициализация ps
  3. //сочи към адреса на първия елемент на константния низ;

Пример:
функция compstr сравнява два низа s1 и s2 символ по символ и връща първия символ от низа s1, който е различен от съответния в низа s2. Ако низа s2 има повече символи се връща първият символ в s2 за който няма съответен в s1. Ако съвпадат се връща нулева стойност.
  1. compstr (char *s1, char *s2)
  2. {
  3.     while (*s1)
  4.         if (*s1++!=*s2++) return *--s1;
  5.         return *s2;
  6. }

Тъй като указателите са променливи те могат да бъдат обединявани в масиви.
  1. int *px[4];
  2. int x1, x2, x3, x4;
  3. p[0] = &x1; p[1] = &x2; p[2] = &x3; p[3] = &x4;
  4.  
  5. int *px[] = { &x1, &x2, &x3, &x4 };