КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
З 2-мірного в 1-й
int mas[3][3]= { {11,12,13}, {21,22,23}, {31,32,33} };
int* aa = (int*)mas;
for(i=0;i<9;i++) { cout<<aa[i]<<" "; }
cout<<"\n\n\n";
З 1-мірного в 2-й int а[9]= {1, 2, 3, 4, 5, 6, 7, 8, 9}; int (*b)[3];
b = (int(*)[3])а;
for(i=0;i<3;i++) { for(j=0;j<3;j++) cout<<b[i][j]<<" "; cout<<"\n"; }
}
Перетворення двовимірного масиву mas[3][3] в одновимірний здійснюється за допомогою рядка коду:
int* aa = (int*)mas;
Тобто вказівка int(*)[3] приводиться до вказівки int*. Перетворення одновимірного масиву а[9] в двовимірний здійснюється за допомогою рядка коду:
b = (int(*)[3])а;
Тобто вказівка int* приводиться до вказівки int(*)[3]. При цьому вказівка b оголошується таким чином:
int (*b)[3];
Після виконання програми отримаємо наступний результат:
11 12 13 21 22 23 31 32 33 1 2 3 4 5 6 7 8 9
Знаючи особливості приведення вказівок при роботі з масивами можна маніпулювати їх вимірюваннями як завгодно. Тобто, перетворити масив з одного вимірювання в інше не представляє ніякої складності, оскільки в пам'яті всі елементи статичних масивів розташовуються послідовно без виділення додаткової пам'яті. Можна працювати з багатовимірними масивами, виділяючи їм динамічну пам’ять з використанням оператору new. Для кожного вимірювання необхідно виділити додаткову пам’ять. Приведемо приклад.
#include <iostream> using namespace std;
void main() { M, n - відповідно кількість рядків І стовпців масиву
int i, j, m, n; cin>>m>>n;
Ініціалізація масиву int **mas = new int*[m]; for (i=0;i<m;i++) mas[i]= new int[n];
Введення даних for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>mas[i][j];
Виведення даних for(i=0;i<m;i++) { for(j=0;j<n;j++) cout<<mas[i][j]<<" "; cout<<"\n"; } Видалення масиву for (i=0;i<m;i++) delete[] mas[i];
delete [] mas; }
Символьні масиви
Рядкових змінних у C++ немає, для цього використовуються масиви символів (символьні масиви) Символом кінця рядку є символ ASCII-нуля, '\0'. Припустимо необхідно зберегти ім’я людини, вік, зарплату. Числові змінні віку та зарплати оголошуються наступним чином:
int age; float salary;
Рядкова змінна не має місця, але можна створити масив символів:
char name[15];
У пам’яті резервується місце під масив, який складається з 15 символів. Під час оголошення масиву символів йому можна привласнити значення рядку.
char name[6] = "Маша";
У пам’яті ЕОМ:
Можна одержати доступ до визначеного елемента масиву:
name[0] = 'П';
У пам’яті ЕОМ:
При виведенні результату можна зазначити тільки ім’я рядку:
cout<<name; //Результат: Паша
Можна оголосити масив символів наступним чином:
char cc[] = {'a', 'b', 'c'};
Цей масив не може бути рядком, просто він містить три різних символи.
char bb = cc[1]; // Змінній bb привласнено // значення 'b' cout<<сс; ПОМИЛКА! Наприкінці ланцюжка символів немає ASCII-нуля, виведення відбуватиметься доти, поки не зустрінеться '\0'.
|