Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Масиви та вказівники




Ініціалізація масивів

Приклад оголошення символьного масиву.

char str[] = "оголошення символьного масиву";

Слід враховувати, що в символьному літералі знаходиться на один елемент більше, оскільки останній з елементів є управляючою послідовністю '\0'.

Ініціалізувати масив можна кількома шляхами:

1) за допомогою вводу з клавіатури;

2) за формулою;

3) явно.

Ініціалізація з клавіатури:

int A[12]

…………

For (i=0; i<12; i++)

{ printf (“vv. El-t № % d”, i);

Scanf (“%d”, &A[i]); }

Ініціалізація явно:

Int I;

Int A [12]={0 7 3 12 14 32 0 7 -2 0 1 12};

………………………..

For (i=0; i<12; i++);

printf (“vv. el-t № %d:”, i);

Явно двомірний масив:

int A [4] [3]= {{ 1 7 9 } {0 4 9 } {9 9 0 }{-7 13 -3}}

_____________

Int i, j;

Int A [4][3]

For (i=0; i<4; i++)

For (j=0; j<3; j++)

{scanf (“%i”, & A [i] [j]);

Як було сказано вище, між масивами та вказівниками існує тісний зв'язок.

Ім’я масиву без квадратних дужок є вказівником на перший елемент масиву.

Data [ ], data- адреса першого елементу масиву.

Може виникнути питання якими чином, якщо для отримання адреси, перед іменем потрібно поставити амперсанд? Це вірно. Отримати адресу першого елементу масиву можна і таким чином:

& data[0]

В мові С справедливе співвідношення: data= = &data[0]

Таким чином, ім’я масиву – вказівник на його перший елемент. До того ж це ім’я є постійним вказівником (адресою константою): тобто, його не можна змінити і воно лишається фіксованим під час виконання програми.

В цьому випадку є здоровий глузд: якщо змінити значення вказівника, то він буде вказувати кудись в інше місце, а не на масив, котрий залишиться в пам’яті там же, де він і був.

В прикладі змінна – вказівник p_array ініціалізується адресою першого елементу масиву array[]

Int array[100], * p_array;

p_array = array;

Так, як p_array - змінна-вказівник, і можна замінити таким чином, щоб вона вказувала на задану адресу. На відміну від імені масиву array, змінна p_array не прив’язана до початку масиву array[].Покажчики на багатовимірні масиви

Покажчики на багатовимірні масиви в мові СІ - це масиви масивів, тобто такі масиви, елементами яких є масиви. При оголошенні таких масивів в пам'яті комп'ютера створюється декілька різних об'єктів. Наприклад при виконанні оголошення двовимірного масиву int arr2[4][3] в пам'яті виділяється ділянка для зберігання значення змінної arr, яка є покажчиком на масив з чотирьох покажчиків. Для цього масиву з чотирьох покажчиків теж виділяється пам'ять. Кожний з цих чотирьох покажчиків містить адресу масиву з трьох елементів типу int, і, отже, в пам'яті комп'ютера виділяється чотири ділянки для зберігання чотирьох масивів чисел типу int, кожний з яких складається з трьох елементів. Таке виділення пам'яті показане на схемі на рис.3.

arr  
у  
arr[0] а arr[0][0] arr[0][1] arr[0][2]
arr[1] а arr[1][0] arr[1][1] arr[1][2]
arr[2] а arr[2][0] arr[2][1] arr[2][2]
arr[3] а arr[3][0] arr[3][1] arr[3][2]
Розподіл пам'яті для двовимірного масиву.

Таким чином, оголошення arr2[4][3] породжує в програмі три різні об'єкти: покажчик з ідентифікатором arr, безіменний масив з чотирьох покажчиків і безіменний масив з дванадцяти чисел типу int. Для доступу до безіменних масивів використовуються адресні вирази з покажчиком arr. Доступ до елементів масиву покажчиків здійснюється з вказівкою одного індексного виразу у формі arr2[2] або *(arr2+2). Для доступу до елементів двовимірного масиву чисел типу int повинні бути використані два індексні вирази у формі arr2[1][2] або еквівалентних їй *(*(arr2+1)+2) і (*(arr2+1))[2]. Слід враховувати, що з погляду синтаксису мови СІ покажчик arr і покажчики arr[0], arr[1], arr[2], arr[3] є константами і їх значення не можна змінювати під час виконання програми.

Розміщення тривимірного масиву відбувається аналогічно і оголошення float arr3[3][4][5] породжує в програмі окрім самого тривимірного масиву з шістдесяти чисел типу float масив з чотирьох покажчиків на тип float, масив з трьох покажчиків на масив покажчиків на float, і покажчик на масив масивів покажчиків на float.

При розміщенні елементів багатовимірних масивів вони розташовуються в пам'яті підряд по рядках, тобто найшвидше змінюється останній індекс, а повільніше - перший. Такий порядок дає можливість звертатися до будь-якого елементу багатовимірного масиву, використовуючи адресу його початкового елементу і лише один індексний вираз.

Наприклад, звернення до елементу arr2[1][2] можна здійснити за допомогою покажчика ptr2, оголошеного у формі int *ptr2=arr2[0] як обіг ptr2[1*4+2] (тут 1 і 2 це індекси використовуваного елементу, а 4 це число елементів в рядку) або як ptr2[6]. Помітимо, що зовні схожий обіг arr2[6] виконати неможливо оскільки покажчика з індексом 6 не існує.

Для звернення до елементу arr3[2][3][4] з тривимірного масиву теж можна використовувати покажчик, описаний як float *ptr3=arr3[0][0] з одним індексним виразом у формі ptr3[3*2+4*3+4] або ptr3[22].

Далі приведена функція, що дозволяє знайти мінімальний елемент в тривимірному масиві. У функцію передається адреса початкового елементу і розміри масиву, значення, що повертається, - покажчик на структуру, що містить індекси мінімального елементу.

 




Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 2334; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.