在struct中访问struct

时间:2017-02-18 22:22:23

标签: c pointers struct

我正在研究树算法。这些是我程序中的结构:

typedef struct{
    double m;   
    double x[DIM];
    double v[DIM];
} Particle;

typedef struct{
    double lower[DIM];
    double upper[DIM];
} Box;

typedef struct Node{
    Particle p;
    Box box;
    struct Node *son[4];
} Node;

现在我编写了一个函数myFunctA(),它由:

给出
void myFunctA(Particle *p, Node *t){
    int b=soNum(&t->box, &t->son->box, p); // Why does "&t->son->box" not work?
// do stuff ...
}

在函数myFunctA()中,我想将box的{​​{1}}和t box的{​​{1}}传递给函数{{1} }}。 <{1}}由

提供
son

我试图通过使用t来执行此操作,但这不起作用。我也试过了soNum()。我得到的错误始终是:

soNum()

我认为这很容易,但我对C仍然很陌生,并且发现它很难看到它。我希望有人可以帮助我!

2 个答案:

答案 0 :(得分:2)

运算符->适用于指针,而不适用于structt是一个指针,因此t->son是正确的。但是,son 不是指针,它是一个指针数组。因此

t->son->box

需要

t->son[someIndex]->box

其中someIndex是一个评估为int的表达式,介于0和3之间(包括0和3)。

答案 1 :(得分:2)

t->son->box需要类似t->son[INDEX]->box(son是一个节点指针数组)。

编译:

#define DIM 3
typedef struct{
    double m;   
    double x[DIM];
    double v[DIM];
} Particle;

typedef struct{
    double lower[DIM];
    double upper[DIM];
} Box;

typedef struct Node{
    Particle p;
    Box box;
    struct Node *son[4];
} Node;

int soNum(Box *box, Box *sonbox, Particle *p){
// do stuff ...
    return 0;
}
void myFunctA(Particle *p, Node *t){
    int b=soNum(&t->box, &t->son[0]->box, p); // Why does "&t->son->box" not work?
// do stuff ...
}