c语言学习(days11)
二维数组作为函数参数传递与操作
参数传递规则
- 列数必须在函数声明中显式指定,例如
int arr[][N]
。 - 行数可通过主调函数计算后传入,例如通过参数
int rows
传递。 - 列数在被调函数中可通过
sizeof(arr[0])/sizeof(arr[0][0])
计算。
标识符的作用域与可见性
作用域类型
- 局部作用域:栈区内存,函数或块内有效。
- 全局作用域:全局区内存,未初始化时默认清零,使用
g_
前缀是常见命名约定。
可见性规则
- 标识符必须先定义后使用。
- 同一作用域禁止同名标识符。
- 无包含关系的不同作用域中同名标识符互不影响。
- 有包含关系的作用域中,外层同名标识符在内层不可见(内层覆盖外层)。
变量的生存期
静态生存期
- 生存期等同于程序运行周期,包括:
- 全局变量。
static int s_i
:局部静态变量,仅在定义作用域内可访问。
- 函数或全局变量前加
static
限制其仅在当前文件可见。 - 内存分配在程序启动前,程序结束时释放。
动态生存期
auto
:默认存储类型,自动分配和释放栈内存。register
:建议编译器将变量存入寄存器(不可取地址)。
Linux/VI 相关操作
:vsp 文件名
:纵向分割窗口打开文件。:sp 文件名
:横向分割窗口打开文件。:set mouse=a
:启用鼠标支持。
头文件与外部声明
- 头文件内容:仅包含函数/变量声明(非定义),例如:
extern int func(int a, int c); // 外部函数声明
extern
关键字:表明标识符定义在其他文件中。