day 8:C语言二维字符数组与函数详解

day 8:C语言二维字符数组与函数详解

一、二维字符型数组

1. 功能

二维字符型数组主要用于存储和操作字符串数组。

2. 定义

char str[5][32];

定义了一个包含5个字符串的数组,每个字符串最大长度为31个字符(加上结束符'\0')。

3. 元素的访问

  • str[0][2]:访问单个字符元素(char类型)
  • str[0]:访问第一行字符数组(char [32]类型)

4. 数组的初始化

4.1 二维整型数组初始化示例
int a[2][3] = {1, 2, 3, 4, 5, 6}; int a[2][3] = {{1, 2, 3}, {4, 5, 6}}; int a[2][3] = {1, 2, 3, 4}; int a[2][3] = {{1, 2}, {3}}; int a[2][3] = {0}; int a[2][3] = {{0}};
int a[][3] = {1, 2, 3, 4, 5, 6}; int a[][3] = {1, 2, 3, 4}; int a[][3] = {{1, 2}, {3}};
4.2 二维字符数组初始化示例
// 方式1:逐个字符初始化 char str[5][32] = { {'h', 'e', 'l', 'l', 'o', '\0'}, {'w', 'o', 'r', 'l', 'd', '\0'}, {'h', 'o', 'w', '\0'}, {'a', 'r', 'e', '\0'}, {'y', 'o', 'u', '\0'} }; // 方式2:字符串初始化(带花括号) char str[5][32] = { {"hello"}, {"world"}, {"how"}, {"are"}, {"you"} }; // 方式3:字符串初始化(简化) char str[5][32] = {"hello", "world", "how", "are", "you"}; // 方式4:全部初始化为0 char str[5][32] = {0}; // 方式5:省略第一维大小 char str[][32] = {"hello", "world", "how", "are", "you"};

二、函数

1. 功能

  • 能够避免重复性代码
  • 可以让程序模块化

2. 函数的三种形式

2.1 函数的定义
函数类型 函数名(数据类型1 形参1, 数据类型2 形参2, ...) { 函数体; return 返回值; }

函数名:与变量名要求保持一致

形参:形式参数,用来展示函数对数据的处理方式

函数类型:函数运行结果的类型

  • 返回值类型与函数类型不一致时,以函数类型为准
  • 函数类型如果不写默认为int类型
  • 如果想设置为void类型返回值,必须将函数类型写成void

返回值:函数的运行结果

2.2 函数的调用
函数名(实参1, 实参2, ...);

调用:可以通过函数名加实参使用函数

  • 主调函数:主动调用函数的函数称为主调函数
  • 被调函数:被别人调用的函数称为被调函数

传参:主调函数调用被调函数,会将实参的值传递给形参

  • 实参个数与形参个数必须一一对应
  • 如果实参与形参类型不匹配,则将实参类型强制类型转换为形参类型再传参

函数调用结果类型为函数类型

函数调用结果的值为函数的返回值

2.3 函数的声明
  • 如果被调函数在主调函数下方定义,需要在主调函数上方声明被调函数
  • 如果被调函数在主调函数上方定义,不需要声明被调函数

3. 变量的作用域和生存周期

3.1 变量的作用域:能够使用变量的范围
  • 局部变量:变量作用域在定义该变量最近的大括号内
  • 全局变量:变量的作用域在本文件中均可使用
3.2 变量的生存周期:变量从被开辟空间到空间被回收的整个过程称为生存周期

4. 变量的存储类型

4.1 变量的定义
存储类型 数据类型 变量名; int a; auto int a;
4.2 存储类型
  1. 自动型存储、局部变量(默认):auto
    • 将变量存放在栈区
    • 局部变量未经初始化为随机值
    • 执行到变量定义时为变量开辟空间
    • 执行到超过变量作用域范围被回收
  2. 寄存器存储:register
    • 将变量存放在CPU内部的寄存器中,如果寄存器存满了等价于auto类型
  3. 外部声明:extern
    • 声明变量或者函数是外部存储的
  4. 静态存储:static
    • 将变量存放在静态区中
    • 未经初始化时值为0值
    • 编译代码时为变量分配空间,执行时加载到数据区中
    • 程序结束回收空间
    • 限定变量/函数作用域只能在本文件中使用
    • 防止多文件编程时变量名或函数名冲突

5. 函数传参

5.1 值传递

实参将值传递给形参,形参拿到实参的值实现后续的操作