MST

星途 面试题库

面试题:C语言结构体变量在不同作用域的特性

请描述在C语言中,结构体变量在函数内部声明和在文件作用域声明时,其作用域分别是怎样的?并举例说明在不同作用域下结构体变量的访问和生命周期情况。
20.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 函数内部声明的结构体变量

    • 作用域:其作用域仅限于该函数内部。从声明处开始,到函数结束处结束。
    • 访问:只能在声明它的函数内部访问。
    • 生命周期:在函数被调用时创建,函数执行结束时销毁。

    示例代码:

    #include <stdio.h>
    
    void testFunction() {
        // 函数内部声明结构体
        struct InnerStruct {
            int value;
        };
        struct InnerStruct innerVar = {10};
        printf("Inner variable value: %d\n", innerVar.value);
    }
    
    int main() {
        testFunction();
        // 这里无法访问 innerVar,因为其作用域在 testFunction 内
        return 0;
    }
    
  2. 文件作用域声明的结构体变量

    • 作用域:从声明处开始,到文件结束处结束。如果该文件被其他文件通过#include包含,那么其作用域扩展到包含它的文件。
    • 访问:在声明之后的同一文件内的任何函数都可以访问。如果结构体变量被声明为extern,其他文件也可以访问。
    • 生命周期:从程序开始执行时创建,到程序结束时销毁。

    示例代码:

    #include <stdio.h>
    
    // 文件作用域声明结构体
    struct OuterStruct {
        int value;
    };
    
    struct OuterStruct outerVar = {20};
    
    void accessOuterVar() {
        printf("Outer variable value: %d\n", outerVar.value);
    }
    
    int main() {
        accessOuterVar();
        return 0;
    }