这个问题的简短版本:指向类的第一个数据成员的指针是否会导致指向其所有数据成员的指针?
讨论:
我正在阅读一些示例代码,这很有趣。当一个特定的函数(在这种情况下是glUniformMatrix4fv
来自 OpenGL 的 C 函数)将一个数组作为参数时,它会以常用的 C 方式传递,即使用指向数组第一个元素的地址的指针,如下所示:
glUniformMatrix4fv(glvariable, 1, 0, &newmatrix[0]);
// 引用新矩阵
该开发人员有一个用于创建 4X4 矩阵的 C++ 类,总共有 16 个浮点数。但是,该类的数据成员分为 4 个独立的向量,每个向量有 4 个数据成员:
以下是该类的数据成员:
vec4 x;
vec4 y;
vec4 z;
vec4 w;
该类vec4
又提供这些数据成员:
T x;
T y;
T z;
T w;
然后他创建了一个函数来指向第一个vec4 x
数据成员:
const T* Pointer() const
{
return &x.x;
}
不知何故,这奇迹般地转化为发送所有 4 个vec4
对象及其各自的 4 个组件:
glUniformMatrix4fv(modelviewUniform, 1, 0, modelviewMatrix.Pointer());
我对 C++ 还很陌生,但这让我感到惊讶,您可以只指向一个数据成员并期望所有其他数据成员也能发送。是因为该类以特定顺序定义它们吗?如果它们在类定义中以不同的顺序定义怎么办?