获取指针值

Get Pointer Value

本文关键字:指针 获取      更新时间:2023-10-16

我是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->zfloat型的,对吗?如果是,则传递给printf的格式字符串不正确。%d标志用于整数。你可能想要%f标志。你得到的大数字不是地址,而是浮点值,转换成双精度,然后它们的位模式被解释为整数,尽管这在技术上是未定义的行为。

http://en.cppreference.com/w/cpp/io/c/fprintf

如果使用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;
}