c语言中,typedef定义一个结构指针类型,在使用这个类型定义变量,为什么会初始化为0x0,指定为NULL不生效

typedefstructBinaryTree*BinaryTree;typedefstructBinaryTreeNode*TreeNode;structBinaryT... typedef struct BinaryTree *BinaryTree;
typedef struct BinaryTreeNode *TreeNode;

struct BinaryTree
{
TreeNode root;
int size;
};

struct BinaryTreeNode
{
ElementKey key;
Element e;
TreeNode left;
TreeNode right;
};

debug时发现如下问题:
int main(int argc, const char * argv[]) {
TreeNode node = (TreeNode) malloc(sizeof(TreeNode)); //运行完这句后,node的left和right都为0x0
node->left = NULL; //运行完这句后,node的left还是为0x0,按道理说应该为NULL才对啊
//开始以为是malloc()方面的原因,后来才用如下方式,直接定义结构:
struct BinaryTreeNode bnode;
bnode.left = NULL;
bnode.right = NULL;
//运行完上面两行后,bnode的left和right都是0x0
return 0;
}

后来把BinaryTreeNode改成:
struct BinaryTreeNode
{
ElementKey key;
Element e;
struct BinaryTreeNode *left;
struct BinaryTreeNode *right;
};

改完之后,发现运行bnode.left = NULL; node.left也就变成了NULL,因此才断定是typedef的问题,但不知道为什么会这样?
展开
 我来答
匿名用户
2016-05-13
展开全部
你也可以这样写typedef struct Node{}Node;Node *LinkList;typedef理解了吗,不理解的话看下面的代码,效果一样struct Node{};struct Node *LinkList;也就是说Node相当于新定义的”节点“类型,用法就像整数类型int,字符型char。而LinkList就是该类型的指针,保存地址,使用的时候是LinkList->data=,LinkList->next=LinkList(或者其他该类型的指针)。
追问
说了跟没说,没卵区别
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式