[英]C++ Arrays and Functions
我如何做一个正确的函数来接收数组作为参数? 在下面的代码中,结果应该是36,但在我的函数中仅显示4。似乎它只传递了第一个元素。
void test(float v[]){
printf("size: %d\n", sizeof(v)); //RESULT: 4
}
int main(){
GLfloat vv[] = {
0, 0, 0,
1, 1, 0,
1, 0, 0
};
printf("size: %d\n", sizeof(vv)); //RESULT: 36
test(vv);
return 0;
}
当将数组作为参数传递时,它会衰减为指向第一个元素的指针。
sizeof
给您指针的大小而不是数组的大小。
最简单的解决方案是将size作为单独的参数传递给函数。
void myFunction(float[] array, size_t size);
我如何做一个正确的函数来接收数组作为参数?
如您的示例所示,如果数组在编译时具有已知的大小,则可以使用模板函数。 本示例通过const引用获取数组元素:
template< class T, size_t N >
void foo( const T (&data)[N] )
{
// length of array is N, can access elements as data[i]
}
int main(){
GLfloat vv[] = {
0, 0, 0,
1, 1, 0,
1, 0, 0
};
foo(vv);
}
那是对该问题的字面答案。 我将使用具有清晰复制,赋值和引用语义的类型,例如std::array
:
template <size_t N>
void foo(const std::array<GLfloat, N>& data)
{
// data looks like a C array, but has size() and many other methods
}
int main(){
std::array<GLfloat, 9>{
{ 0, 0, 0,
1, 1, 0,
1, 0, 0 }
};
foo(vv);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.