C++ sizeof()与[]和.data()的结果不同 const GLfloat tmpArray[]={ -1.0f,-1.0f,0.0f, 1.0f,-1.0f,0.0f, 0.0f,1.0f,0.0f, }; std::cerr

C++ sizeof()与[]和.data()的结果不同 const GLfloat tmpArray[]={ -1.0f,-1.0f,0.0f, 1.0f,-1.0f,0.0f, 0.0f,1.0f,0.0f, }; std::cerr,c++,C++,sizeof(tmpArray)返回预期的数组大小 sizeof(tmpVector.data())返回data()方法返回的内容的大小,该方法是指针(GLfloat*)。在64位平台上,指针的大小为8字节 我该如何使这些尺寸匹配 考虑使用(tmpVector.size()*sizeof(FLfloat)) 向量元素是连续存储的,就像数组元素一样。请记住sizeof()是一个编译时常量。这里您得到的是指针的大小:sizeof(tmp.data())但是数组的sizeof不会给出数组中第一个指针的

sizeof(tmpArray)
返回预期的数组大小

sizeof(tmpVector.data())
返回
data()
方法返回的内容的大小,该方法是指针(
GLfloat*
)。在64位平台上,指针的大小为8字节

我该如何使这些尺寸匹配

考虑使用(tmpVector.size()*sizeof(FLfloat))


向量元素是连续存储的,就像数组元素一样。

请记住
sizeof()
是一个编译时常量。这里您得到的是指针的大小:
sizeof(tmp.data())
但是数组的sizeof不会给出数组中第一个指针的大小吗?是什么让他们不同?不,不会。静态数组的
sizeof()
在编译时已知。函数的作用是:返回一个指针。关键是@derhass刚刚提到的。静态数组不是指针。数组不是指针谢谢,我想当我使用OpenGL开发时,我必须多读一点关于数组的内容,并继续使用它们,因为它在这类东西上使用了很多sizeof。注意:在我的Lubuntu 18.04 64位桌面上,使用g++v7.3:(A)使用tmpVector.size()==0(即空),sizeof(tmpVector)报告24个字节,无论元素类型(b)如何,tmpVector.size()报告1000个元素,sizeof(tmpVector)报告24个字节,。vector自动内存(~stack)对象是24字节的项,用于管理堆中的数据内容。虽然9 x 4字节浮点数组占用36字节的自动内存,但tmpStack只占用24字节的自动(~stack)内存,而36字节位于更大的(~4Gbytes)堆中。
const GLfloat tmpArray[] = { 
  -1.0f, -1.0f, 0.0f,
  1.0f, -1.0f, 0.0f,
  0.0f,  1.0f, 0.0f,
};
std::cerr << sizeof(tmpArray) << std::endl;
std::vector<GLfloat> tmpVector { 
  -1.0f, -1.0f, 0.0f,
  1.0f, -1.0f, 0.0f,
  0.0f,  1.0f, 0.0f,
};
std::cerr << sizeof(tmpVector.data()) << std::endl;
     const GLfloat tmpArray[] = {
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        0.0f,  1.0f, 0.0f,
     };
     cerr << "\n  sizeof(tmpArray) :                    "
          << sizeof(tmpArray) << endl;

     vector<GLfloat> tmpVector {
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        0.0f,  1.0f, 0.0f,
     };
     cerr << "\n  sizeof(tmpVector.data())               "
          << sizeof(tmpVector.data()) << endl;

     cerr << "\n  tmpVector.size() * sizeof(GLfloat) :  "
          << tmpVector.size() * sizeof(GLfloat) << endl;
sizeof(tmpArray) :                    36

sizeof(tmpVector.data())               8

tmpVector.size() * sizeof(GLfloat) :  36