我是靠谱客的博主 风趣棒球,最近开发中收集的这篇文章主要介绍C++结构体指针做函数参数不会改变实参的值,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

参考 https://blog.csdn.net/c991262331/article/details/83274525

在做一道经典的深度优先搜索二叉树的题目时遇到一个问题,即C++中将结构体指针作为参数传递时,并不会改变实参的值!原因是当结构体指针传递给函数时,会拷贝一份指针的值,但是函数内部的指针和函数外部的指针并不是指向同一个引用的,所以才会使得函数里面改变了,但是函数外部无变化,解决方案是在传参的时候,将结构体指针的引用传递过去
在这里插入图片描述

class Solution {
public:
//算法:
//对于某节点x,(1)若p和q分别在x的左子树和右子树中,则满足该条件的最深的节点为p,q的最近公共祖先;
//(2)若x本身是p或q,并且另一节点在x的左子树或右子树中,则x是p,q的最近公共祖先
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        TreeNode* res=0;
        dfs(root,p,q,res);
        return res;
    }
    //结构体指针做参数不会改变形参的值!需要传引用
    //开始我传的是TreeNode* res
    bool dfs(TreeNode* node,TreeNode* p,TreeNode* q,TreeNode*& res){
        if(node==NULL){
            return false;
        }    
        //中序遍历.需要先确定左右子树中是否含p,q,再考虑根节点的情况
        //深搜至树的最底层,直至node==NULL返回false,从最深处叶子节点开始更新。则初始lson/rson为false
        bool lson = dfs(node->left,p,q,res);  
        bool rson = dfs(node->right,p,q,res);

        //满足条件则记录结果
        if((lson&&rson)||((node==p||node==q)&&(lson||rson))){
            res = node;
        }
        //若当前遍历到的节点是p或q,或者之前的递归过程已使lson/rson为真(即p或q已找到),返回true
        return node==p||node==q||lson||rson;
    }
};

最后

以上就是风趣棒球为你收集整理的C++结构体指针做函数参数不会改变实参的值的全部内容,希望文章能够帮你解决C++结构体指针做函数参数不会改变实参的值所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(73)

评论列表共有 0 条评论

立即
投稿
返回
顶部