获取指针值

时间:2013-05-19 17:32:59

标签: c++ pointers

我是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: %d\n", p1->x, p1->y, p1->z);
  positions++;
}

(NxVec3是由我使用的物理引擎定义的类型,它基本上是一种形式的结构(float x,float y,float z))

但是这不能得到坐标的值,但我想,地址,因为它们代表非常大的数字。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:6)

根据您的陈述,p1->xp1->yp1->z的类型为float,对吗?如果是这样,您将不正确的格式字符串传递给printf。 %d标志用于整数。您可能希望使用%f标志。你获得的巨大数字不是地址,而是浮点值,转换为双精度,然后它们的位模式被解释为整数,尽管它在技术上是未定义的行为。

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

如果你使用cout,你不必担心这样的事情,因为它是类型安全的。

P.S。

停止施放。它只会隐藏编译时间,并将它们转换为运行时错误,这会更糟糕。

答案 1 :(得分:1)

  • 如果你真的想使用指针(我建议仅用于练习目的)和
  • 如果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;
}

答案 2 :(得分:0)

如果我得到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;
}