Звертання до елементів масиву через вказівники Ім’я одновимірного

Скачать презентацию Звертання до елементів масиву через вказівники Ім’я одновимірного Скачать презентацию Звертання до елементів масиву через вказівники Ім’я одновимірного

5356-sl_part8.ppt

  • Количество слайдов: 5

>Звертання до елементів масиву через вказівники     Ім’я одновимірного масиву є Звертання до елементів масиву через вказівники Ім’я одновимірного масиву є константним вказівником на його перший елемент. Справедливі рівнозначні вирази: double base [15]; base  & base [0] * base  base [0] base + i  & base [i] * (base + i)  base [i] Індексна та вказівникова форми звертання до елементів масиву рівнозначні. Більш ефективне адресне звертання, бо відповідає механізмові доступу (і реалізовано в компіляторі). Приклад – визначення номера та значення найбільшого елемента масиву довгих цілих чисел.

>#include <stdio.h>    #define n 50 void main() {   #include #define n 50 void main() { long arr[n]; long *pel, *pend, *pmax; int k=0; /* кількість введених елементів */ printf (“Введіть елементи, закінчення – 0\n”); while (k *pmax ) pmax = pel ; printf (“Найбільшим є %d –й елемент, його значення – %ld\n”, (int)(pmax - arr + 1), *pmax); }

>Вказівники у багатовимірних масивах       Пониження вимірності масиву. Вказівники у багатовимірних масивах Пониження вимірності масиву. Елементи багатовимірного масиву займають неперервну ділянку ОП, адресу початку якої зберігає константний вказівник – ім’я масиву. Тому масив можна розглядати як одновимірний. Приміром, для матриці int matr [10] [5] елемент matr [k] [j] буде мати номер k*5 +j , де 5 – кількість елементів у рядку (останній елемент матриці буде мати номер 49 ) . За своїм змістом ім’я багатовимірного масиву є вказівником на перший підмасив даного масиву. Щоб отримати адресу першого елементу, треба виконати операцію перетворення імені масиву до типу вказівника на елементи цього масиву: ( int * ) matr , що визначає & matr [0] [0]

>Відповідно для елемента  matr [k] [j] :      Відповідно для елемента matr [k] [j] : ( int * ) matr +k*5 +j = & matr [k] [j] * (( int * ) matr +k*5 +j ) = matr [k] [j] Пониження вимірності є зручним прийомом, коли треба опрацьовувати повністю заповнений масив. Для цього краще ввести додатковий вказівник і присвоїти йому адресу першого елемента масиву: int *ptr = ( int * ) matr Комбіновані звертання до елементів масиву. Багатовимірний масив є масивом із набору підмасивів меншої вимірності. Зокрема, вираз matr[0] або *matr виділяє перший елемент, який є одновимірним масивом з 5 елементів. А ім’я кожного масиву - це константний вказівник на перший елемент matr[0] = *matr = & matr [0] [0]

>Треба пам’ятати, що між цими вказівниками є принципова відмінність:  matr[0] вказує на перший Треба пам’ятати, що між цими вказівниками є принципова відмінність: matr[0] вказує на перший елемент першого рядка, а matr – на цілий перший рядок даної матриці. Аналогічно для k - рядка матриці matr[k] = *( matr + k) = & matr [k] [0] Послідовність matr[0] , matr[1] ,… matr[9] формує віртуальний масив вказівників – констант, кожна з яких є адресою початку (тобто першого елемента) відповідного підмасиву (рядка) матриці matr . Обчислення адреси j - елемента k – рядка matr[k] +j = *( matr + k) +j = & matr [k] [j] До елементів масиву можна звертатись, використовуючи різні форми доступу matr[k][j] = *(matr[k] +j) = (*(matr + k ))[j] =*(*( matr + k) +j)