Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота №4.doc
Скачиваний:
2
Добавлен:
26.08.2019
Размер:
123.9 Кб
Скачать

2.2. Локальні і глобальні змінні

  • Змінні, які використовуються всередині даної функції, називаються локальними. Пам'ять для них виділяється в стеку, тому після закінчення роботи функції вони віддаляються з пам'яті. Не можна повертати покажчик на локальну змінну, оскільки пам'ять, виділена для такої змінної, звільнятиметься.

  • Глобальні змінні – це змінні, описані поза функціями. Вони видні у всіх функціях, де немає локальних змінних з такими іменами.

2.3. Передача одновимірних масивів як параметрів функції

При використанні масиву як параметра функції, у функцію передається покажчик на його перший елемент, тобто масив завжди передається за адресою. При цьому втрачається інформація про кількість елементів в масиві, тому розмірність масиву слід передавати як окремий параметр.

void print(int а[100],int n)//виведення масиву на екран

{

for(int i=0;i<n;i++)

cout<<a[i]<<" ";

cout<<"\n";

}

Оскільки у функцію передається покажчик на початок масиву (передача за адресою), то масив може бути змінений за рахунок операторів тіла функції.

2.4. Передача рядків як параметрів функцій

Рядок в С++ - це масив символів, що закінчується нуль-символом – ‘\0’ (нуль-термінатором). За розміщенням нуль-термінатора визначається фактична довжина рядка. Кількість елементів в такому масиві на 1 більше, ніж зображення рядка.

Для роботи з рядками існують спеціальні бібліотечні функції, які містяться в файлі string.h.

Рядки при передачі у функції можуть передаватися як одновимірні масиви типу char або як покажчики типу char*. На відміну від звичайних масивів у функції не вказується довжина рядка, оскільки в кінці рядка є ознака кінця рядка /0.

//Функція пошуку заданого символу в рядку

int find(char *s,char c)

{

for (int I=0;I<strlen(s);I++)

if(s[I]==c) return I;

return –1

}

2.5. Передача багатовимірних масивів у функцію

Багатовимірний масив – це масив, елементами якого є масиви. Наприклад, масив int а[4][5] – це масив з покажчиків int*, які містять імена однойменних масивів з 5 цілих елементів:

Мал.3 Виділення пам'яті під масив, елементами якого є масиви.

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

const int N=4;//глобальна змінна

void transp(int a[][N],int n)// транспонування матриці

{

int r;

for(int I=0;I<n;I++)

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

if(I<j)

{

r[a[I][j];

а[I][j]=a[j][I];

а[j][I]=r;

}

}

2.6. Рядки

Рядок в C++ – це масив символів, що закінчується нуль-символом – ’\0’ (нуль-термінатором). За розміщенням нуль-термінатора визначається фактична довжина рядка. Кількість елементів в такому масиві на 1 більше, ніж зображення рядка.

А

\0

А

”A”

рядок

(2 байти)

’A’

символ (1 байт)

Мал. 4. Представлення рядка і символу

Присвоїти значення рядку за допомогою оператора присвоєння не можна. Помістити рядок в масив можна або при введенні, або за допомогою ініціалізації.

char s1[10]="string1";//ініціалізація

char s2[]="string2";//ініціалізація

char s3[10];

cin>>s3;//введення

//виділення пам'яті під динамічний рядок

char *s4=new char[strlen(s3)+1];

strcpy(s4,s3);//копіювання рядка s3 в рядок s4

Для роботи з рядками існують спеціальні бібліотечні функції, які містяться в файлі string.h.

Прототип функції

Короткий

опис

Примітка

unsigned strlen(const char* s);

Обчислює довжину рядка s.

int strcmp(const char* s1, const char* s2);

Порівнює рядки s1 і s2.

Якщо s1<s2, то результат негативний, якщо s1==s2, то результат рівний 0, якщо s2>s1 – результат позитивний.

int strcnmp(const char* s1, const char* s2);

Порівнює перші n символів рядків s1 і s2.

Якщо s1<s2, то результат негативний, якщо s1==s2, то результат рівний 0, якщо s2>s1 – результат позитивний.

char* strcpy(char* s1, const char* s2);

Копіює символи рядка s1 в рядок s2.

char* strncpy(char* s1, const char* s2, int n);

Копіює n символів рядка s1 в рядок s2.

Кінець рядка відкидається або доповнюється пропусками.

char* strcat(char* s1, const char* s2);

Приписує рядок s2 до рядка s1

char* strncat(char* s1, const char* s2);

Приписує перші n символів рядка s2 до рядка s1

char* strdup(const char* s);

Виділяє пам'ять і переносить в неї копію рядка s

При виділенні пам'яті використовуються функції

Рядки при передачі у функції можуть передаватися як одновимірні масиви типу char або як покажчики типу char*. На відміну від звичайних масивів у функції не вказується довжина рядка, оскільки в кінці рядка є ознака кінця рядка \.