我正在研究树算法。这些是我程序中的结构:
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仍然很陌生,并且发现它很难看到它。我希望有人可以帮助我!
答案 0 :(得分:2)
运算符->
适用于指针,而不适用于struct
。 t
是一个指针,因此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 ...
}