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

C 从结构中的结构获取变量的更简单方法,c,struct,C,Struct,自从我上次使用C已经一年多了,所以我基本上回到了基础 我将此代码作为更大文件的一部分: typedef struct { float ix; float iy; float iz; } InitialPosition; typedef struct { InitialPosition init; } Particle; void particle() { Particle p1 = { .init = { .ix = 10

自从我上次使用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和glut,这很可能会产生任何影响


我也应该使用指针吗?(如果是这样的话,举一个使用示例就好了。)就像我说的,已经有一段时间了,所以任何帮助都是值得赞赏的。

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

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)) ;

从风格的角度来看,大多数人可能会对第二种选择皱眉,一个好的优化编译器应该使第一个实例的运行速度几乎与第二个实例的运行速度一样快。

使用指针不会改善这个特定代码示例的任何部分。@aschepler ok谢谢:)我不确定使用指向结构的指针是否会更有效,但如果不是,那就更好了。有趣,我不知道该怎么做。谢谢:)