русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Передача масиву


Дата додавання: 2014-04-22; переглядів: 1023.


При передачі масиву в функцію прийнято використовувати вказівники. Розглянемо це на прикладі програми 12.10.

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<bios.h>

const int MAX=5;

int main()

{clrscr();

void centimize(double*);//прототип

double varray[MAX]={10.0,15.1,12.3,13.7,10.2};

centimize(varray);

for(int j=0;j<MAX;j++)

cout<<”varray[“<<j<<”]=”<<varray[j]<<”см”<<endl;

bioskey(0);

return 0;

}

////////

void centimize(double* ptrd)

{for(int j=0;j<MAX;j++)

*ptrd++*=2.54;

}

Програма 12.10

Прототип функції такий сам, як і в попередній програмі; функція має один аргумент – вказівник на double. При передачі масиву за значенням це виглядало б так:

void centimize(double[]);

Записи double* і double[] еквівалентні, але синтаксис вказівника використовується частіше. Оскільки ім’я масиву є його адресою, то ми не маємо потреби використовувати операцію взяття адреси & при виклику функції

centimize(varray);

У функції centimize ми використовуємо досить складний вираз

*ptrd++*

Як дізнатися, що в цьому виразі збільшується вказівник, а не його вміст? Іншими словами: як компілятор проінтерпретує цей вираз - як *(ptrd++), як нам і потрібно, чи як (*ptrd)++ ? Знаки *(операція розіменування) та ++ мають одинаковий пріоритет. Однак операції однакового пріоритету відрізняються ще й іншим способом – асоціативністю. Асоціативність визначає, як компілятор починає виконувати операції – справа чи зліва. В групі операцій, що мають праву асоціативність, компілятор спершу виконає операцію, яка стоїть справа. Унарні операції * та ++ мають праву асоціативність, тому наш вираз інтерпретується як *(ptrd++) і збільшує вказівник, а не те, на що він вказує. Таким чином, спершу збільшується вказівник, а потім до результату застосовується операція розіменування.

 

Вказівники на рядки

Рядки – це масиви елементів типу char. Таким чином, доступ через вказівники може бути застосований до рядків так само, як і до елементів масиву.

 


<== попередня лекція | наступна лекція ==>
Передача простої змінної | Вказівники на рядкові константи


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн