我有这个结构定义:
typedef struct node_bst
{
int data;
struct node_bst *lchild;
struct node_bst *rchild;
struct node_bst *parent;
} node_bst;
我尝试使用以下方法创建指向结构的指针:
node_bst *root;
并像这样为其分配内存:
root= malloc(sizeof(node_bst));
现在,为了初始化其中的数据项,我尝试了这个语句(从结构变量的通常初始化中得到提示):
*root= {0, NULL, NULL, NULL};
但是编译器抛出了一个错误
错误:“{”标记之前的预期表达式
我查了一下,发现我需要像这样对它进行类型转换:
*root= (node_bst) {0, NULL, NULL, NULL};
现在它工作正常,但我的问题是,为什么我需要这样做?
我希望编译器已经知道 root 是指向 node_bst 类型结构变量的指针。那么为什么需要对右值进行类型转换呢?
另一个奇怪的事情:
int *a= malloc(sizeof(int));
*a= 4;
这工作得很好。