当前位置: 首页 > news >正文

C语言高频面试题——局部变量和全局变量可以重名吗?

在C语言中,局部变量全局变量可以重名。当局部变量和全局变量重名时,局部变量会优先于全局变量,这种现象被称为变量作用域的遮蔽(Shadowing)


1. 变量的作用域

  • 全局变量

    • 定义在函数外部,作用域为整个文件(或跨文件,通过 extern 声明)。
    • 生命周期从程序开始到程序结束。
  • 局部变量

    • 定义在函数内部或代码块中,作用域仅限于该函数或代码块。
    • 生命周期从进入作用域开始,到离开作用域结束。

2. 局部变量和全局变量重名时的行为

当局部变量和全局变量重名时,局部变量会遮蔽(Shadow) 全局变量,即在局部变量的作用域内,全局变量不可见。如果需要访问被遮蔽的全局变量,可以通过 :: 或其他方式显式指定(C++ 中支持 ::,但 C 语言不支持)。

示例代码
#include <stdio.h>int x = 10; // 全局变量void func() {int x = 20; // 局部变量,与全局变量重名printf("Inside func: x = %d\n", x); // 输出局部变量的值
}int main() {printf("Global x = %d\n", x); // 输出全局变量的值func();                       // 调用函数return 0;
}
输出结果
Global x = 10
Inside func: x = 20

相关文章:

  • 02《小地图实时》Unity
  • 区块链随学随记
  • 第二章 信息技术发展(2.2 新一代信息技术及应用)
  • PostgreSQL无法查看表中数据问题排查
  • linux 文本三剑客(grep sed awk)
  • 【计算机视觉】三种图像质量评价指标详解:PSNR、SSIM与SAM
  • 升级xcode15 报错Error (Xcode): Cycle inside Runner
  • 赋能航天教育:高校卫星仿真教学实验平台解决方案
  • 说说stack reconciler 和fiber reconciler
  • 安卓基础(强制转换)
  • ArkTS基础实验 (二)
  • 20250428-AI Agent:智能体的演进与未来
  • About why docker application mode taskmanager not down in time
  • 大数据应用开发和项目实战
  • Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)
  • 聊天室系统:多任务版TCP服务端程序开发详细代码解释
  • 机器学习分类模型性能评估:应对类别不平衡的策略与指标
  • ArcGIS arcpy代码工具——根据属性结构表创建shape图层
  • 基于STM32、HAL库的ATSHA204A安全验证及加密芯片驱动程序设计
  • RAG工程-基于LangChain 实现 Advanced RAG(预检索优化)
  • 王毅谈中拉命运共同体建设“五大工程”及落实举措
  • 共情场域与可持续发展——关于博物馆、美术馆运营的新思考
  • 学者纠错遭网暴,人民锐评:“饭圈”该走出畸形的怪圈了
  • 5年建成强化城市核心功能新引擎,上海北外滩“风景文化都是顶流”
  • 治沙“异瞳”男生疑似摆拍,团队称合作12天多期视频为策划拍摄
  • 七大交响乐团“神仙斗法”,时代交响在上海奏出时代新声