【问题标题】:How to access int a declared in main in another function?如何访问 int a 在另一个函数的 main 中声明?
【发布时间】:2020-09-23 17:12:35
【问题描述】:
#include <iostream>    
using namespace std;

void b();

int main() {

    int a = 10;
    b(); 
}

void b() {
    int a;
    cout<<"Int a="<<a;
}

我希望使用函数在主范围内打印a 的值,使用我当前的代码,它会打印Int a=0。我怎样才能做到这一点?

【问题讨论】:

  • 你学会了向函数传递参数了吗?
  • 是的,自学可能不是很有趣。这就是人们写books 来帮助其他人理解语言的原因。而且你还有很多东西要学。
  • 了解作用域函数参数局部变量的含义..
  • @JonTrauntvein 嗯,这些基本的东西要么已经在这里回答,要么属于教科书。 Stack Overflow 不适合初学者教程。
  • @JonTrauntvein 实际上这个问题提供了一个完整的例子并且很好地解释了这个问题,这超过了平均水平。 Downvotes 是不可能理解的,在 cmets 中讨论它们是徒劳的。我根据您的建议编辑了标题

标签: c++


【解决方案1】:

不要在b() 中声明一个全新的a。 将amain 传递到b(),然后打印出来。

例如:

#include <iostream>

void b(int whatever_name_you_want_here);

int main()
{
    int a = 10;
    b(a);
}

void b(int whatever_name_you_want_here)
{
    std::cout << "Int a=" << whatever_name_you_want_here;
}

【讨论】:

    【解决方案2】:

    //将您的代码更改为以下内容,它将为您提供所需的结果。 在您的代码中,无法将 main 上的 int a 传递给 b();除非 b 接受您希望函数输出的类型的参数。

    #include<iostream>
     
    void b(int);
    
    int main()
    
    {
    
        int a = 10;
        b(a);
    }
    void b(int a){
        std::cout << "int a=" << a;
    }
    

    【讨论】:

    • 是的!在发布之前我仍在努力。不过感谢您的关注!
    • @AryanParekh 格式化代码时,请注意不要更改程序的行为,除非它是简单的事情,例如打错了正确答案的错字。
    • 有道理!
    【解决方案3】:

    我想主要的问题是没有意识到一些非常重要的东西,即作用域!作用域通常由{ 打开并由} 关闭

    除非你创建一个全局变量,否则它只在它被引入(声明)的范围内是已知的。

    您在全局范围内声明了函数 b

    void b();
    

    因此,在此之后,包括main 在内的所有其他功能都知道并可以使用它。

    但是您在main 的范围内声明了变量a

        int a = 5;
    

    所以只有 main 知道并且可以使用它。

    请注意,与其他一些编程语言不同,名称不是唯一的,并且并非程序的每个部分都可以在 c 和 c++ 中识别它们。 所以部分:

    void b() {
        int a;
    

    不强制函数b 识别在main 函数中声明的a,它是一个新的a

    所以要纠正这个错误,只需将变量a 的值或引用传递给函数b

    #include <iostream>    
    
    void b(int&);
    
    int main() {
        int a = 10;
        b(a); 
    }
    
    void b(int& a) {
        std::cout << "Int a=" << a << std::endl;
    }
    

    还请注意,a 作为函数 b 的参数与函数 main 中的 a 不同。 最后的提示是函数的每个参数在函数范围内都是已知的,因为它是在函数范围内声明的!

    【讨论】:

      【解决方案4】:

      您想要实现的目标需要您将值传递给函数。让我给你一个例子来说明如何做到这一点。

      #include<iostream>
      
      void print_value(int value){
          std::cout << "Value is: " << value << '\n';
      }
      
      int main(){
      
          int a = 5;
          print_value(a);
          return 0;
      }
      

      您的程序中唯一缺少的就是参数。我不会在这里解释整个事情,因为网上有很多文章。这是一个直截了当的。 Refer to this to understand how functions work in C++

      【讨论】:

      • 尽管我理解您希望尽早教授最佳实践的意愿,但我认为您关于不使用 using namespace std; 的建议与问题或一般情况无关,因为唯一的库 OP 包括的是 。此处不会发生命名冲突
      • @Sho 确实如此,但是当我开始时,我得到了最好的建议,并且可能在一段时间后,如果一个人习惯了这种说法,他可能不喜欢把std:: 放在任何地方,我认为它是早点养成这个习惯很好
      • @Sho“这里不会发生命名冲突”你确定吗?如果我声明 int cout = 0; 怎么样?虽然我同意回答这个问题是次要的
      • @idclev463035818 我选词不当 :)
      【解决方案5】:

      使用传递引用来访问在另一个函数中声明的变量。 参考以下代码了解引用变量的使用,

      void swapNums(int &x, int &y) {
        int z = x;
        x = y;
        y = z;
      }
      
      int main() {
        int firstNum = 10;
        int secondNum = 20;
      
        cout << "Before swap: " << "\n";
        cout << firstNum << secondNum << "\n";
      
        // Call the function, which will change the values of firstNum and secondNum
        swapNums(firstNum, secondNum);
      
        cout << "After swap: " << "\n";
        cout << firstNum << secondNum << "\n";
      
        return 0;
      }
      

      【讨论】:

        【解决方案6】:
        #include <iostream>
        
        using namespace std;
        
        void displayValue(int number) {
            cout<<"Number is = "<<number;
        }
        
        int main()
        {
            int myValue = 77;
            displayValue(myValue);
        
            return 0;
        }
        

        【讨论】:

          猜你喜欢
          • 2023-03-18
          • 1970-01-01
          • 1970-01-01
          • 2012-07-31
          • 2016-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-19
          相关资源
          最近更新 更多