MST

星途 面试题库

面试题:C++同名变量作用域在函数嵌套中的表现

有如下C++代码,其中包含函数嵌套的情况,请分析并给出输出结果,同时说明不同作用域同名变量的访问规则是如何在这种复杂结构中体现的。 ```cpp #include <iostream> int globalVar = 5; void outerFunc() { int outerVar = 10; std::cout << "outerVar in outerFunc: " << outerVar << std::endl; void innerFunc() { int innerVar = 20; int outerVar = 30; std::cout << "innerVar in innerFunc: " << innerVar << std::endl; std::cout << "outerVar in innerFunc: " << outerVar << std::endl; std::cout << "globalVar in innerFunc: " << globalVar << std::endl; } innerFunc(); std::cout << "outerVar in outerFunc after innerFunc: " << outerVar << std::endl; } int main() { outerFunc(); std::cout << "globalVar in main: " << globalVar << std::endl; return 0; } ```
16.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 输出结果
    outerVar in outerFunc: 10
    innerVar in innerFunc: 20
    outerVar in innerFunc: 30
    globalVar in innerFunc: 5
    outerVar in outerFunc after innerFunc: 10
    globalVar in main: 5
    
  2. 不同作用域同名变量的访问规则在这种复杂结构中的体现
    • 局部优先:在innerFunc中,定义了与outerFunc中同名的变量outerVar。此时,在innerFunc内部访问outerVar时,优先访问innerFunc中定义的局部变量outerVar,值为30。这体现了在一个函数内部,如果有局部变量与外部作用域变量同名,局部变量优先被访问。
    • 访问外部作用域变量:如果要访问外部作用域(如outerFunc)的同名变量,可以使用作用域解析运算符::(这里未使用)。不过,如果没有同名的局部变量,就会访问到外部作用域的变量。例如在outerFunc中,没有与globalVar同名的局部变量,所以在outerFunc中可以直接访问到全局变量globalVar
    • 全局变量访问:全局变量globalVar在任何函数内部都可以访问,只要没有同名的局部变量屏蔽它。在innerFuncouterFuncmain函数中都可以直接访问globalVar,其值始终为5,不受局部变量定义的影响。