我还在学习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,即使它们具有相同的代码。
感谢您的帮助。
答案 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<>
会更好。有了它们,这个尺寸很容易获得,你可以得到其他令人愉快的属性,尤其是它们不会衰减到指针。