> 技术文档 > c语言学习(days11)

c语言学习(days11)


二维数组作为函数参数传递与操作

参数传递规则
  • 列数必须在函数声明中显式指定,例如 int arr[][N]
  • 行数可通过主调函数计算后传入,例如通过参数 int rows 传递。
  • 列数在被调函数中可通过 sizeof(arr[0])/sizeof(arr[0][0]) 计算。

标识符作用域与可见性

作用域类型
  • 局部作用域:栈区内存,函数或块内有效。
  • 全局作用域:全局区内存,未初始化时默认清零,使用 g_ 前缀是常见命名约定。
可见性规则
  1. 标识符必须先定义后使用。
  2. 同一作用域禁止同名标识符。
  3. 无包含关系的不同作用域中同名标识符互不影响。
  4. 有包含关系的作用域中,外层同名标识符在内层不可见(内层覆盖外层)。

变量的生存期

静态生存期
  • 生存期等同于程序运行周期,包括:
    • 全局变量。
    • static int s_i:局部静态变量,仅在定义作用域内可访问。
  • 函数或全局变量前加 static 限制其仅在当前文件可见。
  • 内存分配在程序启动前,程序结束时释放。
动态生存期
  • auto:默认存储类型,自动分配和释放栈内存。
  • register:建议编译器将变量存入寄存器(不可取地址)。

Linux/VI 相关操作

  • :vsp 文件名:纵向分割窗口打开文件。
  • :sp 文件名:横向分割窗口打开文件。
  • :set mouse=a:启用鼠标支持。

头文件与外部声明

  • 头文件内容:仅包含函数/变量声明(非定义),例如:
    extern int func(int a, int c); // 外部函数声明
  • extern 关键字:表明标识符定义在其他文件中。