结构体指针在函数中的应用

结构体指针在函数中的应用

  • 问题的提出:在做二叉树题目的时候,在传递结构体指针的时候,发现当我以这样的形式传入的时候,指针是没有发生任何改变的:
struct TreeNode {
      int val;
      TreeNode *left;
      TreeNode *right;
      TreeNode() : val(0), left(nullptr), right(nullptr) {}
      TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
      TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};
class soultion{
    TreeNode* node = new TreeNode(0);
    private:
    void fun1(TreeNode* res) {
        res = node;
    }
    public:
    void fun2(TreeNode* root) {
    TreeNode* res = nullptr;
    traversal(res);
    /*函数过后,res指针并没有发生改变*/
    }
};

当时的想法是,我传入的是指针,为什么没有任何反应?
查阅资料之后发现,其实形参的传入,在函数中是一份拷贝,无论我们怎么改变,改变的是这个拷贝的指针。并不是传入的指针:
img
那我们一定需要传入这个指针,然后把改变传回来呢?
那只有传递指针的地址,然后在函数内,改变该地址的指针的值就可以实现功能

class soultion{
    TreeNode* node = new TreeNode(0);
    private:
    void fun1(TreeNode** res) {
        *res = node;
    }
    public:
    void fun2(TreeNode* root) {
    TreeNode* res = nullptr;
    traversal(&res);//传入地址
    /*函数过后,res指针发生改变*/
    }
};

参考:脱掉三千烦恼丝

posted @ 2023-02-14 16:38  jiumaohappyboy  阅读(22)  评论(0编辑  收藏  举报