C++ sizeof数组结构错误
我试图使函数初始化指定索引上的VAO,使用一些数据。问题是,当我访问顶点的大小时,返回的大小是错误的 以下是数据:C++ sizeof数组结构错误,c++,opengl,C++,Opengl,我试图使函数初始化指定索引上的VAO,使用一些数据。问题是,当我访问顶点的大小时,返回的大小是错误的 以下是数据: typedef struct { GLfloat XYZW[4]; GLfloat RGBA[4]; } Vertex; const Vertex Vertices2[] = { { { 0.25f, 0.25f, 0.0f, 1.0f },{ 1.0f, 0.0f, 0.0f, 1.0f } }, { { 0.75f, 0.25f, 0.0f,
typedef struct {
GLfloat XYZW[4];
GLfloat RGBA[4];
} Vertex;
const Vertex Vertices2[] =
{
{ { 0.25f, 0.25f, 0.0f, 1.0f },{ 1.0f, 0.0f, 0.0f, 1.0f } },
{ { 0.75f, 0.25f, 0.0f, 1.0f },{ 0.0f, 1.0f, 0.0f, 1.0f } },
{ { 0.50f, 0.75f, 0.0f, 1.0f },{ 0.0f, 0.0f, 1.0f, 1.0f } }
};
const Vertex Indices2[] = {....}
我这样调用函数:
createArrayObjects(0, Vertices2, Indices2);
void createArrayObjects(int index, const Vertex vertices[], const GLubyte indices[]){
cout << sizeof(vertices) << endl; ---> returns 4
cout << sizeof(Vertices2) << endl; ---> returns 96
...
}
createArrayObject(0,垂直2,指示2);
void CreateArrayObject(int索引、常量顶点[]、常量字节索引[]){
cout传递给函数的参数const Vertext vertexts[]
本质上是一个指针,这就是为什么它显示为大小4。您必须以其他方式将数组的大小传递给函数,例如将大小作为单独的参数传递
您可以在前面提出的类似问题中找到更多详细信息。参数const Vertext texts[]
传递给函数的实际上是一个指针,这就是它显示为大小4的原因。您必须以其他方式将数组的大小传递给函数,例如将大小作为单独的参数传递
您可以在前面提出的类似问题中找到更多详细信息。任何时候您通过值将数组传递给函数时,它都会衰减为指针,而不管您以arr[]或arr[size]的形式传递它
,因此sizeof
报告的大小将是指针的大小,即通常为4或8个字节。如果要传递数组并“检测”其大小,可以通过模板非类型参数通过引用传递,如以下简单示例所示:
#include <iostream>
template<typename T, int N>
void f(T(&arr)[N])
{
std::cout << "Size: " << N;
}
int main()
{
double arr[10];
f(arr); // outputs 10
}
#包括
模板
无效f(T&arr)[N])
{
std::cout任何时候你通过值将一个数组传递给一个函数时,它都会衰减为一个指针,不管你是以arr[]
或arr[size]
的形式传递它,因此sizeof
报告的大小将是指针的大小,即通常为4或8个字节。如果你想传递一个数组并“检测”其大小,您可以通过模板非类型参数通过引用传递,如以下简单示例所示:
#include <iostream>
template<typename T, int N>
void f(T(&arr)[N])
{
std::cout << "Size: " << N;
}
int main()
{
double arr[10];
f(arr); // outputs 10
}
#包括
模板
无效f(T&arr)[N])
{
STD:C++中的CUT< P>,类型代码> > yytype [] />代码的函数参数由编译器处理为<代码> yytype type > < /> > < /p>
因此,顶点的类型实际上是一个指针,您可以通过sizeof(顶点)
获得指针的大小
- 如果需要知道传递给函数的数组的大小,可以将其大小作为另一个参数传递
- 或者您可以按照vsoftco所说的那样做,在这种情况下,函数模板将针对传递给函数的每个不同数组大小进行实例化
- 如果您想变得“现代”,还可以传递一个
std::array
或std::vector
,其中包含有关其大小的信息
在C++中,类型代码> > yytype [] />代码的函数参数由编译器处理为<代码> yytype type > < /> > < /p>
因此,
顶点的类型实际上是一个指针,您可以通过sizeof(顶点)
获得指针的大小
- 如果需要知道传递给函数的数组的大小,可以将其大小作为另一个参数传递
- 或者您可以按照vsoftco所说的那样做,在这种情况下,函数模板将针对传递给函数的每个不同数组大小进行实例化
- 如果您想变得“现代”,还可以传递一个
std::array
或std::vector
,其中包含有关其大小的信息
函数参数指定了一个未知大小的数组,这就是为什么sizeof()
不会返回您期望的结果。如果您不传递知道自身大小的对象(例如STL容器类),您需要将数组长度和数组指针传递到函数中。@gigaplex否,函数参数指定了一个指针,它可以是一个衰减为指针的数组,但是。@zenith True,但是长度未知的数组和指针之间没有什么区别。唯一真正的区别是语法,他们使用了ar问题中的ray语法。@andre:Linus Torvalds的这篇文章与您非常相关:函数参数指定了一个未知大小的数组,这就是为什么sizeof()
不会返回您期望的结果。如果您不传递知道其自身大小的对象(例如STL容器类),您需要将数组长度和数组指针传递到函数中。@gigaplex否,函数参数指定了一个指针,它可以是一个衰减为指针的数组,但是。@zenith True,但是长度未知的数组和指针之间没有什么区别。唯一真正的区别是语法,他们使用了ar问题中的ray语法。@andre:Linus Torvalds的这句话与您非常相关:是的,这就是我刚才做的,当我调用函数时,我添加了另一个实数大小的参数,这就是我刚才做的,当我调用函数时,我添加了另一个实数大小的参数