c++的变量作用域

今天刷leetcode二叉树的最小深度这道题时犯了一个错误,浅浅记录一下
原始代码如下,当我希望根据当前所在结点左右子树情况的不同更新result时,我错误地在if语句的函数体内声明变量result,我原来以为这样不管函数进入哪一条if分支都会创建变量result,但实际上这样忽略了变量的作用域,也就是说分支内的变量result只在分支内有效,因此这样会导致错误。

/**
 * Definition for a binary tree node.
 * 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 Solution {
public:

    int minDepth(TreeNode* root) {
        if(root==nullptr)   return 0;

        int left=minDepth(root->left);
        int right=minDepth(root->right);
        if(root->left==nullptr&&root->right!=nullptr){
            int result=right+1;}
        else if(root->left!=nullptr&&root->right==nullptr){
            int result=left+1;}
        else{
            int result=(left<right?left:right)+1;}
        return result;
    }
};

如下面这个例子所示,当多个分支内都重新声明了同名的变量,实际上你创建了多个独立的变量,而不是对同一个变量进行不同的赋值。这可能导致变量作用域错误和预期外的结果。

下面这个示例可以来解释这个问题:

#include <iostream>

int main() {
    int x = 10;

    if (x > 5) {
        int result = x + 5;
        std::cout << "Inside if: " << result << std::endl;
    }

    {
        int result = x - 5;
        std::cout << "Inside block: " << result << std::endl;
    }

    std::cout << "Outside: " << x << std::endl;

    return 0;
}

在这个示例中,我们定义了一个变量 x 并初始化为 10。然后我们有两个分支,一个是 if 语句块内,另一个是一个单独的代码块(使用花括号 {} 定义)。每个分支内都有一个名为 result 的变量,但它们的作用域是局部的,只在各自的分支内有效。

结果输出可能是:

Inside if: 15
Inside block: 5
Outside: 10

正如你可以看到的,尽管两个分支都有一个叫做 result 的变量,但它们并不相互影响,因为它们位于不同的作用域中。如果我们只想在不同的分支内赋值同一个变量,我们应该避免重新声明该变量,而是直接在外部声明它,并在分支内对它进行赋值。

这也是为什么在的原始代码中,多次声明了同名的 result 变量会导致错误的原因。正确的方法是在合适的作用域内声明一次变量,然后在不同的分支内对它进行赋值,从而确保变量在整个函数内都是有效的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值