「已注销」 2017-10-22 16:09 采纳率: 100%
浏览 793
已采纳

关于C/C++ 指针类型的疑问。

![图片说明](https://img-ask.csdn.net/upload/201710/22/1508687842_258506.jpg

我的疑问在于,既然有了
typedef struct TNode *Position;
typedef Position BinTree;
那么 BinTree 就是一种指针了吧。或者说由BinTree定义出来的变量就是一个指针?(我不知道啊,我理解的是)
在主函数传递一个 BinTree的指针过去(区别于传递变量,只是在不同地址赋值相同) 加上引用又有什么作用呢?
在Create函数里面 也是对BT指针进行的操作啊。
指针本质上不就是一个地址么?传送地址 与在Creat函数里面对这个地址的操作 加引用又有什么作用呢?
(然而经过我多次测试 必须加这个 & 引用的,不然是不对的。)
很是困惑啊。

同样还有一个 在链表的,是一样的情况。
图片说明

既然typedef struct LNode {
ElemType data;
LNode * next;
}LNode, *LinkList;

那么 LinkList 就是 struct LNode 的一个指针类型啊,本质上就一个指针。
int ListCreate_L(LinkList &L) {
L = (LNode *)malloc(sizeof(LNode));
L = (LNode *)malloc(sizeof(LNode));
还有这句话 说明L 就是一个指针啊,
而在函数头上 却对 L 前面加个了 &(引用),不明白为什么这样操作。
(也经过多次测试了,不加这个&也是不对的)。

呜呜呜呜。。求解啊。

  • 写回答

2条回答

  • JasBin2008 2017-10-24 13:21
    关注

    你看下下面的知识,再想想看。。。

    要点:每块申请的内存都有它固定的首地址,而我们要做的就是将这个首地址告诉这个“外部指针”,但是这个“外部指针”必须满足以下其中一个条件

    (1)传递的是指针的引用

    (2)传递的是指针的指针

    为什么直接传递指针不可以呢?我们看一个示例:

    class A {
    public:
    A() { cout << "A" << endl; }
    ~A() { cout << "~A" << endl; }
    };

    class Ex_AA {
    public:
    A _a;
    };

    void init(Ex_AA aa) {

    }

    int main(void)

    {

    Ex_AA aa;
    init(aa);
    

    }

    输出:

    A
    ~A
    ~A
    请按任意键继续. . .
    这就是我们常说的值传递了,从上面可以看到调用过程中会产生一个A的副本,结束后A的副本会释放掉。

    所以如果是直接传递指针,调用完成后这个指针变量(也就是原指针变量的副本)会释放掉它所存储的地址信息,申请的内存地址仍然没有传递出去!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 Python安装cvxpy库出问题
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥15 python天天向上类似问题,但没有清零
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 C#调用python代码(python带有库)
  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题