c++ - 如何在方法中获取 int 数组(方法参数)的长度?

标签 c++ arrays parameters integer

<分区>

我的代码很简单:

#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 *,所以 size(b) 的输出是 4,而不是 12。所以,我的问题是,如何在函数 test() 中获取 b[] 的实际长度?

最佳答案

您可以使用函数模板来做到这一点:

#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 .

关于c++ - 如何在方法中获取 int 数组(方法参数)的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25747203/

相关文章:

c++ - 是否有可能实现一个与数组而不是单个对象一起工作的内存池?

c++ - 动态和静态分配的数组元素计算?

c++ - 为什么我们在 C++ 中有不同版本的主要功能?

c++ - 原地轮换C++实践

c++ - 删除数组错误

javascript - 数组解构跳过值

jenkins - Jenkins “Build with Parameters”与Gradle

php - 什么是 PHP 中的参数签名?

command-line - Powershell 命令处理(传入变量)

c++ - 在C++中调用方法上的方法