当前位置: 首页 > news >正文

Linux C语言第九天学习笔记:二维数组与函数

📌 今日学习内容概览

今天的学习从二维数组开始,延续到函数相关知识点,这是C语言从基础语法走向模块化编程的关键一步。

一、二维数组

1.1 二维整型数组

📖 定义格式
数据类型 数组名[行数][列数];

示例:

inta[2][3];// 2行3列的二维数组

⚠️注意:行数和列数必须为常量,不能使用变量。

🔍 元素访问

通过行下标和列下标访问每个元素,下标从0开始:

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2]
💾 存储方式

二维数组在内存中逐行从左到右连续存储,可以理解为一维数组构成的一维数组。

inta[2][3];// 存储顺序:a[0][0] → a[0][1] → a[0][2] → a[1][0] → a[1][1] → a[1][2]

数组所占空间大小 = 数据类型大小 × 元素总个数(行数 × 列数)

📋 初始化方式

全部初始化:

inta[2][3]={1,2,3,4,5,6};inta[2][3]={{1,2,3},{4,5,6}};

局部初始化:

inta[2][3]={1,2,3,4};// 剩余元素补0inta[2][3]={{1,2},{3}};// 每行剩余补0inta[2][3]={0};// 全部初始化为0

默认初始化:

inta[][3]={1,2,3,4,5,6};// 行可省略,列不可省略

1.2 二维字符型数组

🎯 功能

主要用于存储和操作多个字符串,即字符串数组。

📖 定义格式
char数组名[行数][列数];

示例:

charstr[5][32];// 可以存储5个字符串,每个最长31个字符
🔍 元素访问
str[0]// 访问第1行字符串(char[32]类型)str[0][2]// 访问第1行第3个字符(char类型)
📋 初始化方式
// 方式1:逐个字符初始化charstr[5][32]={{'h','e','l','l','o','\0'},{'w','o','r','l','d','\0'}};// 方式2:字符串初始化(推荐)charstr[5][32]={{"hello"},{"world"},{"how"},{"are"},{"you"}};// 方式3:简化写法(最常用)charstr[5][32]={"hello","world","how","are","you"};// 全部初始化为0charstr[5][32]={0};

二、函数

函数是C语言模块化编程的核心,能够避免代码重复,让程序结构更清晰。

2.1 函数的三种形式

① 函数的定义
函数类型 函数名(数据类型1形参1,数据类型2形参2,...){函数体;return返回值;}
  • 函数名:命名规则与变量相同
  • 形参:形式参数,表示函数处理数据的方式
  • 函数类型:返回值类型,默认为int;无返回值需写void
  • 返回值:函数运行结果,类型需与函数类型一致
② 函数的调用
函数名(实参1,实参2,...);
  • 实参个数与形参个数必须一一对应
  • 实参与形参类型不匹配时,会自动强制转换
③ 函数的声明

如果被调函数定义在主调函数之后,需要提前声明:

// 声明intadd(inta,intb);intmain(void){intsum=add(3,5);// 调用return0;}// 定义intadd(inta,intb){returna+b;}

如果被调函数定义在主调函数之前,则无需声明。

2.2 变量的作用域与生存周期

类型作用域生存周期
局部变量定义它的最近一对大括号内执行到定义时开辟,超出作用域回收
全局变量整个文件均可使用程序开始到结束

2.3 变量的存储类型

存储类型 数据类型 变量名;
存储类型关键字特点
自动型auto(默认)存储在栈区,未初始化随机值
寄存器型register存储在CPU寄存器,存取速度快
外部声明extern声明变量/函数在其他文件中定义
静态型static存储在静态区,未初始化默认为0,程序结束才回收

static 的特殊用途:

  1. 限制变量/函数作用域仅在当前文件,避免多文件编程时命名冲突
  2. 静态变量只初始化一次,多次调用保持上次的值

2.4 函数传参:值传递

C语言函数传参默认是值传递:

voidswap(inta,intb){inttmp=a;a=b;b=tmp;}intmain(void){intx=10,y=20;swap(x,y);printf("x = %d, y = %d\n",x,y);// 仍然是10, 20return0;}

🔑核心理解:形参是实参的副本,修改形参不影响实参。

💡 今日学习心得

今天从二维数组过渡到函数,最大的感受是:

  1. 二维数组的存储逻辑——连续存储、逐行排列,这为理解指针和内存布局打下基础。
  2. 函数的模块化思想——将重复逻辑封装成函数,代码可读性和复用性大大提升。
  3. 值传递的本质——理解形参是实参的副本,对后续学习指针(地址传递)至关重要。
http://www.jsqmd.com/news/1291898/

相关文章:

  • 数组排序与
  • 终极指南:一键永久保存QQ空间十年青春记忆的免费开源工具
  • 浏览器隐私守护者:uBlock Origin如何重塑您的网络体验
  • DLSS Swapper终极指南:如何一键升级游戏DLSS版本提升性能
  • 逆向实战:深度解析抖音a_bogus参数JSVMP保护与算法还原
  • 深入解析RS-232/422/485串口通信:从差分信号到Modbus实战
  • 别再盲目选!2026年AI论文写作工具红黑榜,选对工具少走弯路
  • 深入Linux USB Hub驱动:从原理到调试,解决设备识别与枚举问题
  • Go-Micro微服务安全终极实践:从认证授权到数据加密的纵深防御
  • Wireshark网络抓包实战:从TCP三次握手到HTTPS解密
  • 5步掌握BilibiliDown:轻松下载B站Hi-Res无损音频的终极方案
  • 从零搭建规范STM32工程:CubeMX配置与Keil分层架构实战
  • Unity天空盒制作:从全景图到Cubemap的完整实现
  • 玉石复检全流程教学:新手也能自主验货、维权有据
  • 无审查模型与国内通用模型对比
  • KKCE:在线Ping 工具多场景应用与实战指南-快快测
  • Windows下CPython 3.12.1源码编译与调试环境搭建指南
  • 海阳市防水补漏_2026山东东部黄海之滨核电名城漏水维修价格行情与五大正规团队推荐 - 雨婺虹房屋维修
  • 漏洞挖掘趋势:符号执行与 Fuzzing 的融合路径
  • X-AnyLabeling终极指南:免费高效的AI图像标注工具,10倍提升标注效率
  • Qt程序调试实战:内存管理、线程安全与资源访问崩溃排查指南
  • 校园问卷调查与数据分析平台的设计与实现
  • 本地代码大模型评测实战(四):8个坑和1个崩溃
  • 青州市防水补漏_2026鲁中古城海岱明珠漏水维修避坑指南与五大正规团队推荐 - 雨婺虹房屋维修
  • KKCE:路由追踪技术实战从网络诊断到安全防御的全场景应用-快快测
  • 高通平台底层通信与相机调优:从QMI机制到Camera Tuning实战
  • 2026年最新!找北京靠谱机器狗销售厂家必看的完整名单
  • Elasticsearch核心操作指南:索引、文档与映射的实战解析
  • STM32低功耗设计实战:从睡眠到关机的模式选择与代码实现
  • 当AI误判偏瘫患者肩关节代偿动作时——康复工程师紧急修复的6小时实战复盘(含实时反馈日志)