从结构中的结构获取变量的更简单方法

时间:2013-11-30 18:45:44

标签: c struct

自从我上次使用C以来已经过去了一年多,所以我几乎回到了基础。

我将此代码作为更大文件的一部分:

typedef struct 
{
    float ix;
    float iy;
    float iz;
} InitialPosition;

typedef struct
{
    InitialPosition init;
} Particle;

void particle()
{
    Particle p1 = 
    { 
        .init = { .ix = 10, .iy = 10, .iz = 10 },  
    };

    glPointSize(10);
    glBegin(GL_POINTS);
    glVertex3f(p1.init.ix,p1.init.iy,p1.init.iz);
        //glVertex3f( 0, 0, 0 );
    glEnd();
}

它的工作/正确显示我的粒子被绘制到一个轴上,但似乎必须有一种更快的方法将结构中的变量提供给glVertex3f方法。 在偶然的情况下,我使用openGL& amp;过剩。

我是否也应该使用指针? (如果是这样,一个使用的例子会很棒。)就像我说的那样已经有一段时间了,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:2)

采用三个独立参数的函数需要将每个值分解。如果你要经常使用这些电话,你有两种方法可以让它更方便。

1)制作一个辅助功能:

void myglVertexParticle(Particle * apoint) { glVertex3f(init->ix, init->iy, init->iz) ; }

myglVertexParticle( & (p1.init)) ;

2)使用扩展宏:

#define PARTICLE3f(uuu)  uuu.ix, uuu.iy, uuu.iz

glVertex3f( PARTICLE3f( p1.init)) ;

大多数人可能会从风格的角度对第二种选择不屑一顾,而优秀的优化编译器应该使第一种情况的运行速度几乎与第二种情况一样快。