传递给C++函数的数组大小?

use*_*994 4 c++ arrays

可能重复:
如果传递给函数,则确定数组的大小

如何获得传递给函数的C++数组的大小?

在以下代码中,sizeof(p_vertData)不返回正确的数组大小.

float verts[] = {
 -1.0,1.0,1.0,
 1.0,1.0,1.0,
 1.0,-1.0,1.0,
 -1.0,-1.0,1.0,

 -1.0,1.0,-1.0,
 1.0,1.0,-1.0,
 1.0,-1.0,-1.0,
 -1.0,-1.0,-1.0
};

void makeVectorData(float p_vertData[]) {   
 int num = (sizeof(p_vertData)/sizeof(int)); 
 cout << "output: " << num << endl;
}; 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Pau*_*l R 13

你不能 - 当作为函数参数传递时,数组会衰减到指针,所以sizeof不会帮助你.


Did*_*set 8

如果您不介意模板,可以执行以下操作.请注意,只有在编译时已知数组大小时,它才有效.

template <int N>
void makeVectorData(float (&p_vertData)[N]) {   
 int num = (sizeof(p_vertData)/sizeof(p_verData[0])); 
 cout << "output: " << num << endl;
};
Run Code Online (Sandbox Code Playgroud)

还要注意你应该将sizeof(数组)除以数组元素大小.在您的示例中,您将float数组的大小除以整数的大小.

  • 你为什么不简单地使用N参数? (6认同)
  • 我可以,我应该.但我更喜欢在本案例中显示尽可能接近问题的代码示例. (2认同)

Ste*_*anu 2

如果数组不是在编译时生成的,则不能除以 sizeof(float)。但是,在本例中,确实如此,因此编译器知道数组的大小。要记住的事情。