Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ sizeof数组结构错误_C++_Opengl - Fatal编程技术网

C++ sizeof数组结构错误

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,

我试图使函数初始化指定索引上的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, 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的这句话与您非常相关:是的,这就是我刚才做的,当我调用函数时,我添加了另一个实数大小的参数,这就是我刚才做的,当我调用函数时,我添加了另一个实数大小的参数