C ++ - GetLength()方法获取数组的长度

时间:2015-12-31 12:02:19

标签: c++ arrays

我还在学习C ++。目前我正在学习数组,并希望获得数组的长度。我知道要获得数组的长度我必须输入:

int length = (sizeof(array)/sizeof(*array));

效果很好。但是,当我创建一个方法来获取我命名为getLength()的长度时,它不起作用。这是我的代码:

#include <iostream>
using namespace std;

int array[5] = {1,2,3,4,5};

int getLength(int arg[]){
    return(sizeof(arg)/sizeof(*arg));
}

int main(){
    //array length
    cout << "Displaying array length" << endl;
    cout << getLength(array) << endl;
    system("pause");
}

那应该返回5,但它返回1.如果我使用以前的方式,它返回5,即使它们具有相同的代码。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

这是因为array在将getLength传递给sizeof时已将衰减指针类型。

因此在该函数中,getLength不能用于检索数组的总大小;它只是计算指向第一个元素的指针的大小。

在这个例子中,正常的做法是将大小值作为参数传递给rgba(31,194,174,1)

答案 1 :(得分:1)

因为当您将数组传递给函数时,数组会衰减为指针。因此{{1}}将返回架构上指针的大小。如果需要大小,则需要将额外参数传递给函数。 检查:What is array decaying?

答案 2 :(得分:0)

当您使用数组调用函数时,数组会衰减到指向第一个元素的指针。数组语法非常误导。以下两个函数是等效的:

void func1(int* p) { /* do something */ }
void func2(int p[]) { /* do something */ }

有关详细信息,请参阅this stack overflow answer

您可以做的是深入研究模板。这是一个有效的功能:

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

模板通过引用捕获数组(arr),模板匹配已知大小(N)。您的main()示例可以使用它。

尽管如此,我认为您使用std::vector<>std::array<>会更好。有了它们,这个尺寸很容易获得,你可以得到其他令人愉快的属性,尤其是它们不会衰减到指针。