获取指针值
Get Pointer Value
我是c++指针的新手,我有一个从指针获取值的问题。
我有一个指针,verticesPosBegin,它指向用于保存顶点位置的数组的开始。每个顶点存储为一个3分量的浮点向量(xyz)。
我需要从中获取每个顶点并访问其x,y,z值
我是这样做的:
NxVec3* positions = (NxVec3*)data.verticesPosBegin;
for(int i=0;i<nrVertices;i++)
{
NxVec3* p1 = (NxVec3*)positions;
printf("Vertex coordinates x: %d, y: %d, z: %dn", p1->x, p1->y, p1->z);
positions++;
}
(NxVec3只是由我使用的物理引擎定义的类型,它基本上是一个形式的结构(float x, float y, float z))
但这并没有得到坐标的值,而是地址,我猜,因为它们表示非常大的数字。
根据你的陈述,p1->x
, p1->y
, p1->z
是float
型的,对吗?如果是,则传递给printf的格式字符串不正确。%d
标志用于整数。你可能想要%f
标志。你得到的大数字不是地址,而是浮点值,转换成双精度,然后它们的位模式被解释为整数,尽管这在技术上是未定义的行为。
如果使用cout,就不必担心这样的问题,因为它是类型安全的。
公立小学停止铸造。它只会隐藏编译时错误,并将它们转换为运行时错误,这明显更糟糕。
- 如果你真的想使用指针(我建议只用于练习目的)和
- 如果
data.verticesPosBegin
指向Nx3浮点数的连续块 - ,如果NxVec3是只有三个数据成员的类/结构,则
float x, y, z;
下面的代码应该可以工作:
NxVec3 *positions = (NxVec3*)data.verticesPosBegin, *p(positions);
for(unsigned int i=0;i<nrVertices;i++)
{
cout << "Vertex coordinates ";
cout << "x: " << p->x << ", ";
cout << "y: " << p->y << ", ";
cout << "z: " << p->z << endl;
++p;
}
如果我得到NxVec3
正确,这里是定义,NxVec3,所以,根据头文件,以下应该工作:
NxVec3* positions = (NxVec3*)data.verticesPosBegin;
for(int i = 0;i < nrVertices; ++i)
{
float *p = positions[i].get();
cout << p[0] << ' ' << p[1] << ' ' << p[2] << endl;
}
相关文章:
- 我可以使用 decltype() 或其他东西通过指针获取真实类型吗?
- 通过基类指针获取派生类对象的引用
- C++从双指针获取数据
- 如何从原始指针获取shared_ptr?
- 如何从C++中的字符指针获取子字符串
- 使用 std::launder 从指向非活动工会成员的指针获取指向活动工会成员的指针?
- 使用我的共享指针获取内存泄漏
- 通过指向非多态类型的基类的指针获取已分配内存的地址
- 指向引用的指针获取器
- 使用 std::launder 从指向非活动对象的指针获取指向活动对象成员的指针?
- CPP:无法使用 -> 通过指针获取成员的值
- 字符串十六进制到指针获取值
- 从基类指针获取模板派生类的值
- 从 C++ 数组元素的指针获取索引的最快方法是什么
- 通过指针获取最大数量的元素
- 如何使用指针获取字符串数据
- 返回指向指针数组的指针获取下一个元素失败
- 从"子项"项指针获取"父""std::tuple"
- 从成员函数指针获取方法的返回类型
- 如何从指向数组的指针获取对该数组的引用