当前位置: 首页 > 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(预检索优化)
  • 牛市早报|国家发改委:将推出做好稳就业稳经济推动高质量发展若干举措
  • 见证上海援藏30年成果,萨迦非遗珍品展来沪
  • 玉渊谭天丨中方减少美国农产品进口后,舟山港陆续出现巴西大豆船
  • 谁将主导“视觉大脑”?中国AI的下一个超级赛道
  • 当智驾成标配,车企暗战升级|2025上海车展
  • 马上评丨喷淋头全是摆设,酒店消防岂能“零设防”