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的问题,但不知道为什么会这样? 展开
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(或者其他该类型的指针)。
追问
说了跟没说,没卵区别
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询