在C++中使用 size 的奇怪行为

strange behaviour using sizeof in C++

本文关键字:size C++      更新时间:2023-10-16

我对C++很陌生。从示例中,我发现sizeof的这种用途是为了检索数组的长度

int main()
{
int newdens[10];
// the first line returns 10 which is correct
std::cout << "nLength of array = " << (sizeof(v1)/sizeof(*v1)) << std::endl;
std::cout << "nLength of array = " << (sizeof(v1) << std::endl; //returns 40
std::cout << "nLength of array = " << (sizeof(*v1)) << std::endl; //returns 4
    }

但是如果我写了这样的函数

#include <iostream>
void myCounter(int v1[])
    {
    int L, L2, L3;
    L = (sizeof(v1)/sizeof(*v1)); 
    L2 = (sizeof(v1)); 
    L3 = (sizeof(*v1)); 
    std::cout << "nLength of array = " << L << std::endl;
    std::cout << "nLength of array = " << L2 << std::endl;
    std::cout << "nLength of array = " << L3 << std::endl;
    }
int main()
{
int v1[10];
std::cout << "nLength of array = " << (sizeof(v1)/sizeof(*v1)) << std::endl;
std::cout << "nLength of array = " << (sizeof(v1)) << std::endl;
std::cout << "nLength of array = " << (sizeof(*v1)) << std::endl;
myCounter(v1);
    }

输出为 L=2, L2 = 8, L3 = 4。我不明白问题出在哪里。

如何在函数中检索 v1 的正确长度?

您的问题是sizeof()在编译时已解决。由于它没有关于阵列大小的信息,因此无法判断其大小。它将其解释为指向 int 的指针,该 int 在您的计算机上是 64 位的。

最好的方法是使用 std::vector 而不是 C 样式数组,并使用其方法 size()