Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


З 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] = "Маша";

 

У пам’яті ЕОМ:

 

[0] М
[1] А
[2] Ш
[3] А
[4] \0

 

Можна одержати доступ до визначеного елемента масиву:

 

name[0] = 'П';

 

У пам’яті ЕОМ:

[0] П
[1] А
[2] Ш
[3] А
[4] \0

 

При виведенні результату можна зазначити тільки ім’я рядку:

 

cout<<name; //Результат: Паша

 

Можна оголосити масив символів наступним чином:

 

char cc[] = {'a', 'b', 'c'};

 

Цей масив не може бути рядком, просто він містить три різних символи.

 

char bb = cc[1]; // Змінній bb привласнено

// значення 'b'

cout<<сс;

ПОМИЛКА! Наприкінці ланцюжка символів немає ASCII-нуля, виведення відбуватиметься доти, поки не зустрінеться '\0'.


Поделиться:

Дата добавления: 2014-12-30; просмотров: 102; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты