Передача масивів як параметри 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Передача масивів як параметри



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

 

#include <1ostream.h>

int sum(const int* mas, const int n);

int const n = 10;

int main(){

int marks[n] = {3, 4.5, 4, 4};

cout “ "Сума елементів масиву: " “ sum(marks, n):

return 0;

}

int sum(const int* mas, const int n){

// варіанти: int sum(int mas[], int n) // або  

int sum(int mas[n], int n)        

// (величина n повинна бути константою) int s = 0:

for (int i = 0; i<n; i++) s += mas[i];

return s: }

 

 

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

_­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

 

Модуль 7 Базові структури даних.

Тема:

Струтури.

Ініціалізація структур.

Доступ до полів структури.

Структури (struct)

 

На відміну від масиву, всі елементи якого однотипні, структура може містити елементи різних типів. У мові C++ структура є видом класу й має всі його властивості, але в багатьох випадках досить використати структури так, як вони визначені в мові З:

 

struct [ ім'я_типу ] {

тип_1 елемент_1;

тип_2 елемент_2;

тип_n елемент_n;

} [ список_описателів ];

 

Елементи структури називаються полями структури й можуть мати будь-який тип, крім типу цієї ж структури, але можуть бути покажчиками на нього. Якщо відсутнє ім'я типу, повинен бути зазначений список описателів змінних, покажчиків або масивів. У цьому випадку опис структури служить визначенням елементів цього списку:

 

// Визначення масиву структур і покажчика на структуру:

struct {

char fio[30];

int date, code:

double salary:

}staff[100]. *ps;

 

Якщо список відсутній, опис структури визначає новий тип, ім'я якого можна використати надалі поряд зі стандартними типами, наприклад:

 

struct Worker{   // опис нового типу Worker

char fio[30]:

int date, code:

double salary;

}; // опис закінчується крапкою з коми

// визначення масиву типу Worker і покажчика на тип

Worker: Worker staff[100], *ps;

 

Ім'я структури можна використати відразу після його оголошення (визначення можна дати пізніше) у тих випадках, коли компіляторові не потрібно знати розмір структури, наприклад:

 

struct List;                // оголошення структури List

struct Link{

List *p;                     // покажчик  на структуру List

Link *prev, *succ;  // покажчики на структуру Link

}:

struct List { /* визначення структури List */}:

 

Це дозволяє створювати зв'язні списки структур.

 

Ініціалізація структур.

Для ініціалізації структури значення її елементів перераховують у фігурних дужках у порядку їхнього опису:

 

struct{

char fio[30];

int date, code;

double salary;

 }worker = {"Страусенко", 31, 215, 3400.55}:

 

При ініціалізації масивів структур варто брати у фігурні дужки кожен елемент масиву (з огляду на, що багатомірний масив - це масив масивів):

 

struct complex{

float real, im;

} compl [2][3] = {

{{1, 1}, [1, 1}, {1, 1}},     II рядок 1, тобто масив compl[0]

 {{2, 2}, {2, 2}, {2, 2}}   // рядок 2, тобто масив compl[l]

}:

 

Для змінних того самого структурного тину визначена операціяприсвоювання, при цьому відбувається заелементне копіювання. Структуру можна передавати у функцію й повертати як значення функції. Інші операції зі структурами можуть бути визначені користувачем (див. «Перевантаження операцій», с. 189). Розмір структури не обов'язково дорівнює сумі розмірів її елементів, оскільки вони можуть бути вирівняні по границях слова.

 

Доступ до полів структури.

 

Доступ до полів структури виконується за допомогою операцій вибору (крапка) при звертанні до поля через ім'я структури й -> при обігу через покажчик, наприклад:

 

worker worker, staff[100]. *ps;

worker.fio = "Страусенко";

staff[8].code = 215;

ps->salary = 0.12;

 

Якщо елементом структури є інша структура, то доступ до її елементів виконується через дві операції вибору:

 

struct A {int a: double x;};

struct В (A a: double x;} х[2];

х[0].а.а = 1;

х[1].х = 0.1;

 

Як видно із приклада, поля різних структур можуть мати однакові імена, оскільки в них різна область видимості. Більше того, можна повідомляти в одній області видимості структуру й інший об'єкт (наприклад, змінну або масив) з однаковими іменами, якщо при визначенні структурної змінної використати слово struct, але не раджу це робити - заплутати компілятор сутужніше, ніж себе.

 

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 38; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.39.74 (0.008 с.)