昏昏暗暗 2022-10-20 22:14 采纳率: 85%
浏览 25
已结题

c++中结构体别名的指针形参和实参的问题


#include<iostream>
using namespace std;

typedef struct A
{
    int data;
    int height;
    struct A* left;
    struct A* right; 
}*DD;

void hanshu(DD& T)//既然root是指针那这里用&取地址符
{
    int n;
    int x;
    cin >> n;
    for (int i = 0; i < n; n++)
    {
        cin >> x;
        insert(T, x);//那这里的T为什么不写成*T呢? 要不然形参这里 insert(DD& T, int x)为什么用&取地址符呢?
    }
    return;
}

DD insert(DD& T, int x)
{
    if (T == NULL)
    {
        T = new A;
    }
return T;
}

int main(void)
{
    DD root = NULL;//结构体别名这里的root是否就相当于*root=&DD 了? 这里的别名结构体root就是=*root了?
    hanshu(root);//为什么这里不是*root呢? 别名typedef还可以让root省略*号吗?

    return 0;
}
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-10-20 23:49
    关注
    
    typedef struct A
    {
        int data;
        int height;
        struct A* left;
        struct A* right; 
    }*DD;
    上面的结构体定义,简化为:typedef struct A * DD;  也就是 struct A* 用 DD 别名来代替。
    DD root = NULL;  等价于:struct A * root  = NULL;
    & 是引用,void hanshu(DD& T) 形参 DD& T ,相当于 struct A * & T , .引用是直接访问指针变量 root 。
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • CSDN专家-link 2022-10-21 08:05
    关注
    
    #include<iostream>
    using namespace std;
    typedef struct A
    {
        int data;
        int height;
        struct A* left;
        struct A* right; 
    }*DD; //-----------DD是结构体的指针类型 
    void hanshu(DD& T)//既然root是指针那这里用&取地址符         //-------------由于本函数传入的T可能是个空指针,需要在函数中实现指针空间分配,所以必须用引用或者DD *T的方式才能实现
    {
        int n;
        int x;
        cin >> n;
        for (int i = 0; i < n; n++)
        {
            cin >> x;
            insert(T, x);//那这里的T为什么不写成*T呢? 要不然形参这里 insert(DD& T, int x)为什么用&取地址符呢?//------------因为insert参数为引用,所以这里只需要传递T,不需要传递*T
        }
        return;
    }
    DD insert(DD& T, int x)   //--------------------与hanshu函数一个理由 ,因为函数内有T = new A,会给T分配空间,所以必须是引用或者 DD *T。当然由于insert函数有返回类型DD,所以本身insert函数参数可以是DD T的 ,但使用方式必须是  DD T;   T = insert(T,x);这种方式
    {
        if (T == NULL)
        {
            T = new A;
        }
    return T;
    }
    int main(void)
    {
        DD root = NULL;//结构体别名这里的root是否就相当于*root=&DD 了? 这里的别名结构体root就是=*root了?   //--------------这里只是将结构体指针赋值为空而已,*root=&DD 是乱写的,DD是类型,怎么取地址?
        hanshu(root);//为什么这里不是*root呢? 别名typedef还可以让root省略*号吗?  //----注意看hanshu参数的要求啊,要求是DD的引用类型啊,所以root就可以了啊
        return 0;
    }
    
    
    
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 创建了问题 10月20日

悬赏问题

  • ¥15 关于网上一个easyx制作的见缝插针小游戏(c++)
  • ¥15 开地址法双散列函数处理碰撞
  • ¥15 想问一下这个是什么情况 虚拟机Linux打不开了
  • ¥15 联通光猫掉注册了怎么重新注册上去
  • ¥15 关于unity开发steamvr程序遇到的问题
  • ¥60 求tc downloader的下载方式
  • ¥15 华为 快捷方式 手电筒 接口
  • ¥15 Qt6.5支不支持Android13开发啊
  • ¥20 网络只能跑一半,应该如何设置
  • ¥20 Python调用百度开发者平台人脸识别接口