樱花庄的某君 2022-11-28 17:40 采纳率: 76.9%
浏览 49
已结题

C语言给函数传参有两个星号是什么意

在学二叉树的时候,对结构体有个疑问。如下,定义一个二叉树节点结构体,并以先序顺序插入节点,以中序遍历打印数据:

#include <stdio.h>
#include <stdlib.h>

//二叉树结构体
typedef struct BitNode {
    int data;
    struct BitNode* lchild, * rchild;
}BitNode,*BiTree;

//先序顺序建立二叉链表
void CreatBiTree(BiTree *tree) {
    int n;
    printf("请按先序顺序输入元素:\n");
    scanf_s("%d", &n);
    if (n == 0) {
        *tree = NULL;
    }
    else {
        *tree = (BitNode*)malloc(sizeof(BitNode));
        (*tree)->data = n;
        CreatBiTree(&((*tree)->lchild));
        CreatBiTree(&((*tree)->rchild));
    }
}

//中序遍历二叉树
void InOrderTraverse(BiTree T) {
    if (T) {
        InOrderTraverse(T->lchild);
        printf("%d", T->data);
        InOrderTraverse(T->rchild);
    }
}

void main() {
    BiTree tree;
    CreatBiTree(&tree);
    InOrderTraverse(tree);
}


1.结构体定义的后面有个*BiTree,然后再main函数里定义了BiTree类型的变量tree,那这个tree不就是指向节点的指针吗,它本身不就是地址吗?那为啥给CreatBiTree传参的时候,还要加个取地址符呢?tree本身不就是一个地址吗?对地址取地址是为什么呢?

2.还有个疑问就是在CreatBiTree函数里面的参数,BiTree *tree,BiTree本身就是指针类型,后面又加个星号是为什么呢?理解不了这里的意思,我的理解是BiTree *tree = BitNode **tree,这也没有意义呀,这是什么意思呢?

  • 写回答

1条回答 默认 最新

  • 浪客 2022-11-28 18:57
    关注

    BiTree tree; 里的tree是个指针,它本身也有个地址。要改变tree的值很简单,可以用tree=0x123,但是在函数中改变这个值,并把它通过参数带出函数则需要给函数传递这个指针的地址了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月28日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?