#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
.我怎样才能做到这一点?
不要在b()
中声明一个全新的a
。 将a
从main
传递到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;
}
//将您的代码更改为以下内容,它将为您提供所需的结果。 在您的代码中,无法将主上的 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;
}
我想主要问题是没有意识到一些非常重要的东西,称为范围!示波器通常由{
打开,由}
关闭
除非创建全局变量,否则它仅在引入(声明)的作用域内是已知的。
您在全局范围内声明了函数b
:
void b();
因此,在此之后,包括main
在内的所有其他功能都知道并可以使用它。
但是您在main
范围内声明了变量a
:
int a = 5;
所以只有主知道它并可以使用它。
请注意,与其他一些编程语言不同,名称不是唯一的,并且并非程序的每个部分都能在 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;
}
另请注意,函数b
的a
as 参数与函数main
中的a
不同。 最后一个提示是函数的每个参数在该函数作用域内都是已知的,因为它是在函数作用域内声明的!
你想要实现的目标需要你向函数传递一个值。让我举个例子来说明如何做到这一点。
#include<iostream>
void print_value(int value){
std::cout << "Value is: " << value << 'n';
}
int main(){
int a = 5;
print_value(a);
return 0;
}
程序中唯一缺少的是参数。我不会费心在这里解释整个事情,因为网上有很多文章。这是一个直截了当的。 请参阅此内容以了解函数在C++中的工作方式
使用引用传递来访问在一个函数中声明的变量。 参考下面的代码来了解引用变量的使用,
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;
}
#include <iostream>
using namespace std;
void displayValue(int number) {
cout<<"Number is = "<<number;
}
int main()
{
int myValue = 77;
displayValue(myValue);
return 0;
}