Передача параметров и область действия массива в C / C ++ - PullRequest
0 голосов
/ 29 декабря 2011

Эта проблема беспокоит меня с незапамятных времен.У меня есть массив, и в области его объявления я могу использовать оператор sizeof, чтобы определить количество элементов в нем, но когда я передаю его в функцию, он интерпретируется как просто указатель на начало массива иоператор sizeof просто дает мне размер этой переменной указателя.Как и в следующем примере,

#include<iostream>
int count(int a[]){
    return (sizeof(a)/sizeof(int));
}
int main(){
    int a[]={1,2,3,4,5};
    std::cout << sizeof(a)/sizeof(int) << " " << count(a) << std::endl;
    return 0;
}

Вывод кода: 5 2.Как передать массив функции, чтобы я мог определить ее размер, используя только оператор sizeof, и мне не пришлось передавать дополнительный размер в качестве параметра этой функции?

Ответы [ 2 ]

6 голосов
/ 29 декабря 2011
template<size_t N>
int count(int (&a)[N])
{
    return N;
}
1 голос
/ 29 декабря 2011

Вы не можете этого сделать. Нет способа передать массив, который заставит его нести информацию о размере. Вы должны сделать это самостоятельно. Вы должны передать счет в качестве дополнительного параметра.

...