2013-04-21 2 views
1

У меня есть этот кодМожет ли кто-нибудь объяснить эту структуру в C?

#define MAX_DIM 3 
struct kd_node_t 
{ 
    double x[MAX_DIM]; 
    struct kd_node_t *left, *right; 
}; 

struct kd_node_t wp[] = { 
    {{2, 3}}, {{5, 4}}, {{9, 6}}, {{4, 7}}, {{8, 1}}, {{7, 2}} 
}; 

Я не понимаю объявление структуры в этом case.Please помочь мне

+0

массив 'double' размера' MAX_DIM' (3) и два указателя с самоначислением (возможно, реализация kd-tree)? Предполагая, что это реализация дерева, наиболее вероятно, указатель на левый и правый узел (который должен иметь тот же тип, что и эта структура, поскольку все они являются узлами). – RageD

+0

Да, я вижу код дерева kd, но это очень сложно понять. –

+0

Я не понимаю, почему у вас есть массив x [3]. Я думал, что kd-tree - это 'struct kd_node_t {int axis; двойное значение; struct kd_node_t * left, * right}; ' –

ответ

1

Это использование фигурных скобок initialiation.

Массив дает список с разделителями-запятыми, инициализирующий каждую структуру массива (если задан явный размер, оставшиеся структуры будут нулевой инициализированы, я полагаю).

Поскольку все они похожи, просто возьмите первый, {{2,3}}.

У этого есть один элемент, {2,3}, который рассказывает вам, как инициализировать член x. Поскольку указаны только два значения, остаток будет инициализирован нулем, давая [2,3,0]. Аналогичным образом, left и right инициализируются нулевыми указателями.

Остальные структуры массива инициализируются аналогичным образом.

+0

Спасибо, я это понял. –