Масиви як аргументи

Якщо в якості аргументу функції задається масив, то передається вказівник на його перший елемент. Наприклад:

 

int strlen(const char*);

void f()

{

char v[] = "масив";

strlen(v);

strlen("Микола");

}

 

Це означає, що фактичний аргумент типу T[] спочатку приводиться до типу T*, а потім передається функції. Тому присвоювання елементу формального аргументу - масиву змінює цей елемент. Іншими словами, масиви відрізняються від інших типів тим, що вони не можуть передаватися за значенням.

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

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

Інший спосіб полягає в наступному. Оголошується структура, що містить вказівник на масив і розмір масиву, який передається функції. Ця структура передається функції як аргумент.

Наприклад:

 

void compt1(int* vec_ptr, int vec_size); // 1-й спосіб передачі масиву

struct vec // 2-й спосіб передачі масиву

{

int* ptr;

int size;

};

void compt2(vec v);