Как получить длину массива int (метода paramater) внутри метода? [Дубликат]

0

Мой код довольно прост:

#include <iostream>
using namespace std;
int test(int b[]){
    cout<<sizeof(b)<<endl;
    return 1;

}
int main(){
    int a[] ={1,2,3};
    cout<<sizeof(a)<<endl;
    test(a);
    system("pause");
}

вывод этого кода:

12
4

это означает, что когда a [] передается как параметр функции test(), это ухудшилось как int *, поэтому выход размера (b) равен 4, а не 12. Так что мой вопрос в том, как можно Я получаю фактическую длину b [] внутри функции test()?

  • 0
    Привет, IIRC вы не можете, потому что параметр функции является указателем. если вам действительно нужна эта функция, вы можете использовать std::array или std::vector
Теги:
arrays
integer
parameters

1 ответ

6

Вы можете сделать это с помощью шаблона функции:

#include <cstddef> // for std::size_t

template<class T, std::size_t N>
constexpr std::size_t size(T (&)[N])
{ 
  return N;
}

тогда

#include <iostream>

int main()
{
    int a[] ={1,2,3};
    std::cout << size(a) << std::endl;
}

Обратите внимание, что в C и C++ int test(int b[]) - это еще один способ сказать int test(int* b), поэтому информация о размере массива внутри test функции отсутствует. Кроме того, вы можете использовать стандартные типы контейнеров библиотеки, которые знают их размер, например std::array.

  • 0
    Спасибо. Ваше шаблонное решение довольно превосходно. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню