QQ登录

只需一步,快速开始

搜索
查看: 100|回复: 7

[已解决]关于二叉树结点的结构体指针的一些疑惑

[复制链接]
最佳答案
0 
累计签到:11 天
连续签到:5 天
发表于 2017-10-11 21:06:32 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我在学习小甲鱼的数据结构的二叉树一节时,对下面的代码有点疑惑,求路过的大佬们解惑!!
在这这里定义了结构体指针BiTree:
  1. //定义一个树的结点
  2. typedef struct  BiTNode
  3. {
  4.     char   data;
  5.     struct  BiTNode  *lchild,*rchild;
  6. } BiTNode,*BiTree;
复制代码

然后在这里用它定义T的时候,不明白为什么要在T的前面加个*,这样的话T就是个二重指针,这样做有什么好处吗,或者为什么不直接用T
  1. //默认使用前序遍历
  2. void  CreateTree(BiTree  *T)
  3. {
  4.     char  c;

  5.     scanf("%c",&c);
  6.     if( ' ' == c)
  7.     {
  8.         *T = NULL;
  9.     }
  10.     else
  11.     {
  12.         *T = (BiTNode *)malloc(sizeof(BiTNode));
  13.         (*T)->data = c;
  14.         CreateTree(&(*T)->lchild);
  15.         CreateTree(&(*T)->rchild);
  16.     }
  17. }
复制代码

谢谢!!!!
最佳答案
2017-10-12 19:05:58
qq64765940 发表于 2017-10-12 18:01
大佬可不可以再详细一点,在这里BiTree指向结构体,T又指向BiTree,您的意思是说用T去改变BiTree的指向吗 ...

不不不,你的理解已经颠覆了我。
是这样的,BiTree是代表结构体类型的指针,就像int是整型类型一样,只是int是库里面写好的,BiTree是你自己写的,BiTree本身是没指向的,就是个类型。BiTree T才是指针,T为指针,指向的东西是BiTree这中结构类型的。BiTree *T那就是二重指针,前面说了不加“*”已经是指针了,要是再加上“*”就是指针的指针,作用当然也就是指向指向BiTree这个类型的指针的指针,要是这么说你觉得看不明白,我举个例子,首先BiTree T,然后我再声明一个BiTree *P = &T,那么P就是指向T,P存放就是T这个指针的地址,那么P的意义是什么那,就是改变T这个地址的值(这里补充一个知识点:T指向的东西的地址会存放在T的地址的值里),那么T就会被迫的指向别的地方。比如,T指向a,我现在让*P = &b(这里的a,b都是常数),前面说了*P = T(你不会要问为什么前面*P = &T,这里就变了?因为前面是声明+定义,要是分开,单纯的初始化P,就是先声明:BiTree *P,再定义P = &T。也就是说声明的*代表指针,定义要是写个*就代表解引用,这个应该知道吧?),那么是不是可以 T = &b,间接的强迫T指向到了b。
就是这个意思,所以二重指针就是为了让指针强迫的接受改变指向。
好了,你先看着,不懂点“回复”,不然我收不到消息。懂了点下“最佳答案”
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
147 
累计签到:109 天
连续签到:56 天
发表于 2017-10-11 22:11:20 | 显示全部楼层
用指向指针的指针(二重指针)去改变指针自身的指向(一重指针的指向)。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
0 
累计签到:11 天
连续签到:5 天
 楼主| 发表于 2017-10-12 14:36:58 | 显示全部楼层
大佬可不可以再详细一点,在这里BiTree指向结构体,T又指向BiTree,您的意思是说用T去改变BiTree的指向吗,可是这里不是两个都指向结构体吗
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
0 
累计签到:11 天
连续签到:5 天
 楼主| 发表于 2017-10-12 18:01:01 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-11 22:11
用指向指针的指针(二重指针)去改变指针自身的指向(一重指针的指向)。

大佬可不可以再详细一点,在这里BiTree指向结构体,T又指向BiTree,您的意思是说用T去改变BiTree的指向吗,可是这里不是两个都指向结构体吗
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
147 
累计签到:109 天
连续签到:56 天
发表于 2017-10-12 19:05:58 | 显示全部楼层    本楼为最佳答案   
qq64765940 发表于 2017-10-12 18:01
大佬可不可以再详细一点,在这里BiTree指向结构体,T又指向BiTree,您的意思是说用T去改变BiTree的指向吗 ...

不不不,你的理解已经颠覆了我。
是这样的,BiTree是代表结构体类型的指针,就像int是整型类型一样,只是int是库里面写好的,BiTree是你自己写的,BiTree本身是没指向的,就是个类型。BiTree T才是指针,T为指针,指向的东西是BiTree这中结构类型的。BiTree *T那就是二重指针,前面说了不加“*”已经是指针了,要是再加上“*”就是指针的指针,作用当然也就是指向指向BiTree这个类型的指针的指针,要是这么说你觉得看不明白,我举个例子,首先BiTree T,然后我再声明一个BiTree *P = &T,那么P就是指向T,P存放就是T这个指针的地址,那么P的意义是什么那,就是改变T这个地址的值(这里补充一个知识点:T指向的东西的地址会存放在T的地址的值里),那么T就会被迫的指向别的地方。比如,T指向a,我现在让*P = &b(这里的a,b都是常数),前面说了*P = T(你不会要问为什么前面*P = &T,这里就变了?因为前面是声明+定义,要是分开,单纯的初始化P,就是先声明:BiTree *P,再定义P = &T。也就是说声明的*代表指针,定义要是写个*就代表解引用,这个应该知道吧?),那么是不是可以 T = &b,间接的强迫T指向到了b。
就是这个意思,所以二重指针就是为了让指针强迫的接受改变指向。
好了,你先看着,不懂点“回复”,不然我收不到消息。懂了点下“最佳答案”
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
0 
累计签到:11 天
连续签到:5 天
 楼主| 发表于 2017-10-12 19:46:35 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-12 19:05
不不不,你的理解已经颠覆了我。
是这样的,BiTree是代表结构体类型的指针,就像int是整型类型一样,只 ...

理解了,非常感谢!!!
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
147 
累计签到:109 天
连续签到:56 天
发表于 2017-10-12 20:00:05 | 显示全部楼层
qq64765940 发表于 2017-10-12 19:46
理解了,非常感谢!!!

没事多想想,指针是个好东西,就是初看太复杂,多看就没那么难了,用起来得心应手
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
最佳答案
0 
累计签到:11 天
连续签到:5 天
 楼主| 发表于 2017-10-12 21:20:51 | 显示全部楼层
丶忘却的年少o 发表于 2017-10-12 20:00
没事多想想,指针是个好东西,就是初看太复杂,多看就没那么难了,用起来得心应手

太绕了就是。。。
1. 如果您的提问得到满意的答案,请务必选择【最佳答案】;2. 如果想鼓励一下楼主或帮助到您的朋友,可以给他们【评分】作为奖励;
3. 善用【论坛搜索】功能,那里可能有您想要的答案;4. 粘贴代码请点击编辑框上的 <> 按钮,否则您的代码可能会被“吃掉”!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋手机版Archiver( 粤公网安备 44051102000370号 | 粤ICP备11014136号

© 2010-2017 FishC.com GMT+8, 2017-10-22 03:24 Powered by Discuz! X2.5 Theme by dreambred

快速回复 返回顶部 返回列表