1

Тема: Поясніть за масиви, та як їх передавати в функції

Хай. От зробили ми масив

int aa[] = { 1, 2, 3 };

або

int aa[3];
    aa[0] = 1;
    aa[1] = 2;
    aa[2] = 3;

І ми можемо без проблем дізнатись про його довжину, за допомогою

sizeof(aa)/sizeof(aa[0])

Тобто, при виклику

sizeof(aa)

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

void show(int aa[])
{
    std::cout << sizeof(aa) << std::endl;
}

То воно виводить лишень розмір елементу масиву?
Звісно, я десь чув, що ім'я масиву - це покажчик на перший елемент масиву, але звідки береться отой розмір масиву в байтах, якщо в функції його вже немає? де він зберігається, як?
Ми можемо передати масив, просто масив, в функцію, і дізнатись в тій функцію про довжину цього масиву?
p.s. з char'ом все зрозуміло, там масив закінчується, коли ми бачимо "\0", а в int'і є свій "\0"?

2

Re: Поясніть за масиви, та як їх передавати в функції

sizeof - не функція, а особлива конструкція мови, і, здається, єдина, яка працює із масивами не так, як решта. Зазвичай для масивів діє правило a == &a[0] (ім'я масиву - це вказівник на його перший елемент); але sizeof бере розмір масиву в байтах.
У функцію завжди передається вказівник на масив, і ваше визначення еквівалентне

void show(int *aa);

А розмір треба передавати окремим параметром.

Подякували: FakiNyan1

3

Re: Поясніть за масиви, та як їх передавати в функції

я так зрозумів що ніяк, можна або явно передавати довжину вектора в функцію, або якщо ви використовуєте с++ то використовувати якийсь контейнер з std. Зазвичай для масивів використовується vector. Якщо у вас масив не динамічний і с++ 11 то можна в принципі використати і std::array.

Подякували: FakiNyan1

4

Re: Поясніть за масиви, та як їх передавати в функції

от капець

5

Re: Поясніть за масиви, та як їх передавати в функції

koala написав:

У функцію завжди передається вказівник на масив, і ваше визначення еквівалентне

void show(int *aa);

А розмір треба передавати окремим параметром.

можна ще так:

void function (int mas[])

6

Re: Поясніть за масиви, та як їх передавати в функції

Cyan написав:
koala написав:

У функцію завжди передається вказівник на масив, і ваше визначення еквівалентне

void show(int *aa);

А розмір треба передавати окремим параметром.

можна ще так:

void function (int mas[])

*WALL*

7

Re: Поясніть за масиви, та як їх передавати в функції

подетальніше, будь ласка

8

Re: Поясніть за масиви, та як їх передавати в функції

шо так, шо так, все одно передається покажчик

Подякували: koala1

9

Re: Поясніть за масиви, та як їх передавати в функції

Cyan написав:

подетальніше, будь ласка

Цитую:

FakiNyan написав:
void show(int aa[])
Koala написав:

ваше визначення еквівалентне

void show(int *aa);
Cyan написав:

можна ще так:

void function (int mas[])

10

Re: Поясніть за масиви, та як їх передавати в функції

FakiNyan написав:

шо так, шо так, все одно передається покажчик

В точку, тільки в формі a[] неможливо його (локально) змінити в функції.

11

Re: Поясніть за масиви, та як їх передавати в функції

koala написав:
Прихований текст
Cyan написав:

подетальніше, будь ласка

Цитую:

FakiNyan написав:
void show(int aa[])
Koala написав:

ваше визначення еквівалентне

void show(int *aa);
Cyan написав:

можна ще так:

void function (int mas[])

так, не дочитала... :[

Подякували: koala1