Лабораторная работа: Вказівки, масиви і символьні рядки в мові C
mas=new int[n][k]; // Невірно! Помилка!
Такий спосіб виділення пам’яті не дасть вірного результату. Наведемо приклад створення двовимірного масиву.
#include<iostream.h>
#include<conio.h>
int main()
{
int n;const m=5;
printf("input the number";
scanf(&n);
int** a; //a - вказівник на масив вказівників на рядки
a=new int* [n]; //виділення пам’яті для масиву вказівників на n рядків
for(int i=0;i<n;i++)
a[i]=new int [m]; //виділення пам’яті для кожного рядка масиву розмірністю nxm
…
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
printf(a[i][j]);
}
for(int i=0;i<n;i++)
delete [] a[i]; //звільнення пам’яті від кожного рядка
delete [] a; //звільнення пам’яті від масиву вказівників
getch();
return 0;
}
2.2 Використання вказівників при роботі з рядками
Символьна константа складається з одного символа ASCII між апострофами (''). Приклади спеціальних символів:
Новий рядок | '\n' |
Горизонтальна табуляція | '\t' |
Повернення каретки | '\r' |
Апостроф | '\'' |
Лапки | '\"' |
Нульовий символ | '\0' |
Зворотний слеш | '\\' |
Символьні дані в С предствляють у вигляді стрингів. Стринги є одним з найбільш корисних та важливих типів даних мови С. Символьний рядок (стринг ) — це масив символів, що закінчується у лапки ("). Він має тип char. Нульовий символ (\0) автоматично додається останнім байтом символьного рядка та виконує роль ознаки його кінця. Кількість елементів у масиві дорівнює кількості символів у стрингу плюс один, оскільки нульовий символ також є елементом масива. Кожна стрингова константа, навіть у випадку, коли вона ідентична іншій стринговій константі, зберігається у окремому місці пам'яті. Якщо необхідно ввести у рядок символ лапок ("), то перед ним треба поставити символ зворотного слешу (\). У стринг можуть бути введені будь-які спеціальні символьні константи, перед якими стоїть символ \.
Прототипи всіх функцій, що працюють з рядками символів, містяться у файлі string.h. Всі функції працюють з рядками, що закінчуються нульовим символом. Ось деякі з них:
int strcat( char *, char *) — з'єднати два стринги;
int strcpy(char *s1, char *s2) — копіювати рядок s2 у рядок s1;