C 语言基础知识

关键字static的作用是什么?

  • 修饰局部变量:使变量在程序整个生命周期内只初始化一次,函数调用结束后不被销毁,值保持不变
  • 修饰全局变量:限制变量作用域在当前文件内,其他文件无法访问
  • 修饰函数:限制函数作用域在当前文件内,实现函数封装和隐藏

全局变量和局部变量在内存中是否有区别?

内存存储位置不同:

  • 全局变量:存储在静态数据区,程序运行期间始终存在
  • 局部变量:存储在栈区,函数调用时创建,执行结束时销毁

生命周期不同:

  • 全局变量:程序启动时分配,程序结束时释放
  • 局部变量:随函数执行动态分配与释放

堆栈溢出一般是由什么原因导致的?

主要原因:

  • 递归调用过深:无限递归或递归层次过多
  • 函数调用嵌套过多:调用链过长导致栈空间不足
  • 局部变量过大:函数内定义大数组或大量局部变量

不能做switch()的参数类型?

switch语句的限制:

  • 不能使用:浮点型(float, double)、字符串型、对象型
  • 只能使用:整型(int, char, short, long)或可转换为整型的类型

局部变量能否和全局变量重名?

可以重名,遵循就近原则:

  • 函数内引用同名变量时,使用局部变量而不是全局变量
  • 同一函数内可以在不同作用域定义同名局部变量
  • 局部变量会”隐藏”同名的全局变量

do…while和while…do有什么区别?

  • do…while:先执行循环体,再判断条件(至少执行一次)
  • while:先判断条件,再执行循环体(可能一次都不执行)

程序的内存分配?

C程序内存分为5大存储区:

  • 栈区(stack):存放函数参数、局部变量,由编译器自动管理
  • 堆区(heap):动态分配内存,由程序员管理(malloc/free)
  • 全局区(静态区):存放全局变量和静态变量
  • mhb 文字常量区:存放常量字符串
  • 程序代码区:存放函数体的二进制代码

堆和栈的区别?

分配方式:

  • 堆:程序员手动分配释放(malloc/free),生命周期由程序员控制
  • 栈:编译器自动分配释放,根据变量作用域管理

存储内容:

  • 堆:动态分配的大型数据结构,访问速度较慢
  • 栈:局部变量和函数参数,访问速度较快

const的三个作用:


C 语言基础知识
https://tangerine-kitten-lux.netlify.app/C-语言基础知识/
作者
lux
发布于
2025年7月17日
许可协议