Студопедия

КАТЕГОРИИ:

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


Програма помилкова.




 

void main()

{

char name[20];

name = "Петя"; //Не можна імені масиву

//привласнити значення, що

//можливо тільки при

//оголошенні.

}

 

Для ініціалізації масиву існує 5 основних засобів. 3 з них ініціалізуються під час оголошення.

 

#include <iostream>

using namespace std;

 

void main()

{

// 1-й засіб

char f1[] = "Привіт";

 

// 2-й засіб

char f2[7] = "Привіт";

 

// 3-й засіб

char f3[] = {'П','р','и','в','і','т','\0'};

 

// 4-й засіб

char f4[7];

//використання бібліотечної функції

strcpy(f4, "Привіт");

 

// 5-й засіб

char f5[7];

f5[0]= 'П';

f5[1]= 'р';

f5[2]= 'и';

f5[3]= 'в';

f5[4]= 'і';

f5[5]= 'т';

f5[6]= '\0';

}

 

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

Приклад:

 

char nam[]={'T','e','d','\0','E','v','a','\0',

'S','a','m','\0'};

 

Номер елемента Значення
[0] T
[1] Е
[2] D
[3] \0
[4] E
[5] V
[6] A
[7] \0
[8] S
[9] A
[10] M
[11] \0

 

cout <<nam; //Надрукує Ted

cout <<nam+4; //Надрукує Eva

cout <<nam+8; //Надрукує Sam

Використання вказівок на символи.

Розглянемо 2 рядки:

 

char cara[]="Привіт";

char *cp = "Москва";

Після початкової ініціалізації у вказівці на символьну змінну міститься адреса першого символу рядка.

 

cara = "Привіт"; //Невірно

cp = "Київ"; //Можна: занесення у вказівку

//нового рядка.

Приклад:

 

#include <iostream>

using namespace std;

 

void main()

{

char name[20] = "Іван Петров";

char *t = name;

strcpy(t+5,"Сидоров");

cout <<t; //Іван Сидоров

}

 

Запам’ятовування масивів рядків.

char names[5][20]=

{

{"Наташа"},

{"Георгій"},

{"Ан"},

{"Оля"},

{"Льоша"}

};

 

Таблиця займає в пам’яті багато місця. Нераціонально використовується пам’ять.

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

 

1-й варіант 2-й варіант
char *names[5]= { {"Наташа"}, {"Георгій"}, {"Ан"}, {"Оля"}, {"Льоша"} }; char *names[]= { "Наташа", "Георгій", "Ан", "Оля", "Льоша" };

 

Рядки можуть знаходитися в будь-якому масиві пам’яті

 

[0] Наташа\0
[1] Георгій\0
[2] Ан\0
[3] Оля\0
[4] Льоша\0

 

cout << *names; //Друкує Наташа

cout << *(names+1); //Георгій

 

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

Приклад:

При запровадженні чисел від 1 до 7 на екран виводиться день тижня

 

#include <iostream>

using namespace std;

 

void main()

{

char *dn[]=

{

"Понеділок",

"Вівторок",

"Середа",

"Четвер",

"П’ятниця",

"Субота",

"Неділя"

};

int day_num;

do

{

cout <<"Введіть день тижня(1-7) ";

cin >> day_num;

}

while ((day_num < 1)||(day_num > 7));

cout << *(day_num - 1 + dn) << "\n";

}

 

Контрольні питання

 

1. Що таке вказівка?

2. Як оголосити вказівку та взяти адресу змінної?

3. Призначення вказівки void *.

4. Як привести вказівку до потрібного типу даних?

5. Призначення операторів new, delete та delete [].

6. Що таке посилання?

7. Призначення та використання посилань.

8. Що таке масив?

9. Які існують засоби ініціалізації одновимірного масиву?

10. Організація введення/виведення масиву.

11. Наведіть приклад введення/виведення одновимірного масиву.

12. Як розміщується одновимірний масив в пам’яті?

13. Що таке багатовимірний масив?

14. Як знайти мінімальний та максимальний елементи масиву?

15. Як вказівка пов’язана з одновимірним масивом? Використання арифметичних операцій з вказівками.

16. Яким чином перетворити двовимірний масив до одновимірного? Наведіть приклад.

17. Яким чином перетворити одновимірний масив до двовимірного? Наведіть приклад.

 


Поделиться:

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





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