网站建设方案书模板百度电话怎么转人工
理解C++中变量的作用域
常规变量(如前面定义的所有变量)的作用域很明确,只能在作用域内使用它们,如果您在作用域外使用它们,编译器将无法识别,导致程序无法通过编译。在作用域外面,变量是未定义的实体,编译器对其一无所知。
为了更好地理解变量的作用域, 以下是个不错的示例:
#include <iostream>
using namespace std;void MultiplyNumbers ()
{cout << "Enter the first number: ";int firstNumber = 0;cin >> firstNumber;cout << "Enter the second number: ";int secondNumber = 0;cin >> secondNumber;// Multiply two numbers, store result in a variableint multiplicationResult = firstNumber * secondNumber;// Display resultcout << firstNumber << " x " << secondNumber;cout << " = " << multiplicationResult << endl;
}int main ()
{cout << "This program will help you multiply two numbers" << endl;// Call the function that does all the workMultiplyNumbers();// cout << firstNumber << " x " << secondNumber;// cout << " = " << multiplicationResult << endl;return 0;
}
输出:
This program will help you multiply two numbers
Enter the first number: 51
Enter the second number: 24
51 x 24 = 1224
分析:
请注意,不能在函数 MultiplyNumbers( )外面使用变量 firstNumber 和 secondNumber。如果您取消对 main() 中第 28 或 29 行的注释,将出现编译错误,而错误很可能是标识符未声明(undeclared identifier)。
这是因为变量 firstNumber 和 secondNumber 的作用域为局部,被限定在声明它的函数内,这里为 MultiplyNumbers()。局部变量只能在这样的范围内使用,即从声明它的语句开始到当前函数的末尾。标识函数结束的花括号( })也限定了函数内部声明的变量的作用域。函数结束后,将销毁所有局部变量,并归还它们占用的内存。
编译时,在 MultiplyNumbers() 内部声明的变量在该函数结束时不再存在,如果在 main() 中使用它们,程序将无法通过编译,因为在 main() 中这些变量未声明。
警告:
如果您在 main() 声明另一组同名变量,就不能指望它们的值与您在 MultiplyNumbers()中赋给同名变量的值相同。
编译器将 main() 中声明的变量视为独立的实体,即便它们与另一个函数中声明的变量同名,因为这些变量的作用域不同。
该文章会更新,欢迎大家批评指正。
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,
分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,
fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,
TCP/IP,协程,DPDK等技术内容,点击立即学习:
服务器课程:C++服务器