This is because an expression of type C works the other way around.
It:
node (*children)[2];
reads as follows: the contents children, when dereferencing ( *applies to them), enter something that the array operator can apply to [], giving node. This means that it childrenis a pointer to an array of two node. However, you do not need a pointer to an array, you need an array of two pointers. To do this, you must put parentheses this way:
node *(children[2]);
: children ; * , a node. , : node. , :
node *children[2];
C, , [] *.
C , , , , node ( ), , , type " node". .
: _node , . "". , . , : typedef struct node_ node;