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-语言基础知识/