【问题标题】:How can I calculate size of Array in C++如何在 C++ 中计算数组的大小
【发布时间】:2020-04-23 02:18:02
【问题描述】:

我今天参加了在线编码面试,在尝试计算数组的大小时我真的很吃力。 你能帮我看看如何在这里测量 sizeof 数组吗?我尽力了,但没有运气,请在这里帮忙。

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void arraysize(int* a) {
    cout << "size1: "<<sizeof(a) << endl;
    cout << "size2: " << sizeof(a[0]) << endl;;
}

int main()
{
    int array1[] = { 1,2,3,4,5,6,7,8 }; 

    arraysize(array1);


    return 0;

}

结果: 尺寸1:4 尺寸2:4

【问题讨论】:

  • 你可以更改arraysize的签名吗?如果是这样,如果您创建一个接受 std::array 的模板函数,那么它很简单。
  • 函数arraysize 无法根据显示代码中可用的信息确定array1 的大小。你被问到的具体问题是什么?如果是如何更改代码以使数组大小可用,那么有几种选择。
  • 要读的东西books.google.co.nz/…
  • 这能回答你的问题吗? determine size of array if passed to function

标签: c++


【解决方案1】:

在大多数情况下,当您将数组传递给函数时,该数组将被转换为指针。这称为数组到指针衰减。一旦发生这种衰减,您就会丢失数组的大小信息。也就是说,你不能再从指针中分辨出原始数组的大小了。

但是,当我们将 reference 传递给数组时,这种转换/衰减将 发生的一种情况。我们可以利用这个属性来获取数组的大小。

#include<iostream>

template<typename T, size_t N>
size_t asize(T (&array)[N])
{
    return N;
}

int main()
{
    int array1[] = { 1,2,3,4,5,6,7,8 };
    std::cout << asize(array1) << std::endl;  // 8
    return 0;
}

在上面的例子中,给模板函数asize,我们传递了一个T[N]类型的数组的引用,它的大小是N。在这种情况下,它是数组类型int[8]。所以函数返回N,大小为8。

【讨论】:

    【解决方案2】:

    C 风格 array 在传递给这样的函数时衰减为 pointer。 第一个cout 语句在您的机器上打印pointer 的大小。 第二个cout 语句正在打印integer 的大小。

    使用以下解决方案之一将array 的大小传递给函数。

    template<std::size_t N>
    void ArraySize( int ( &array )[ N ] )
    {
        std::cout << "Array size: " << N << '\n';
    }
    
    void ArraySize( int* array, std::size_t size )
    {
        std::cout << "Array size: " << size << '\n';
    }
    
    template<std::size_t N>
    void ArraySize( std::array<int, N>& array )
    {
        std::cout << "Array size: "<< array.size( ) << '\n';
    }
    

    【讨论】:

      【解决方案3】:

      sizeof(a) 返回数组中的字节数, sizeof(int) 返回 int 中的字节数, 尔格 sizeof(a)/sizeof(int) 返回数组长度

      【讨论】:

        【解决方案4】:

        获取数组大小的最简单方法:

        #include <iostream>
        
        using namespace std;
        
        int main(void) {
            int ch[5], size;
        
            size = sizeof(ch) / sizeof(ch[0]);
        
            cout << size;
        
            return 0;
        }
        

        输出:5

        【讨论】:

          【解决方案5】:

          只需将sizeof(array1) 除以sizeof(int)。它会给你数组中的总元素。因为sizeof(array1) 将给出数组中的总字节数。例如sizeof(array1) = int * 8 因为你的数组是 int 所以 int 是 4 字节答案是 4*8 = 32。现在你必须再次将它除以 4 因为它是字节。

          cout << "Size of the Array is : " << sizeof(array1)/sizeof(int) << endl;
          

          把上面的代码放在你的主函数中得到结果

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-08-26
            • 2010-10-17
            • 1970-01-01
            • 1970-01-01
            • 2020-05-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多