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

C语言第4讲:数组

大家好,今天给大家整理了 C 语言数组从入门到实战的完整知识点,涵盖一维数组、二维数组、内存存储、变长数组、经典练习题,逻辑清晰、代码可直接运行,非常适合新手学习和复习。


📑 文章目录

  1. 数组核心概念
  2. 一维数组(基础核心)
  3. 二维数组(进阶必备)
  4. C99 变长数组(VLA)
  5. 数组经典实战练习
  6. 数组高频易错点总结
  7. 结语

🔎 一、数组核心概念

数组是 C 语言中一组相同类型元素的有序集合,是编程最常用的数据结构之一。

  • 数组中元素类型必须完全相同
  • 元素个数不能为 0
  • 常见分类:一维数组、二维数组(最常用的多维数组)

📌 二、一维数组(基础核心)

1. 一维数组创建

数据类型 数组名[常量值];

示例:

int math[20]; // 存储20个int类型成绩 char ch[8]; // 存储8个char类型字符 double score[10];// 存储10个double类型数据

2. 一维数组初始化

使用大括号{}赋值,分为两种方式:

  • 完全初始化:元素个数与数组大小一致
int arr[5] = {1, 2, 3, 4, 5};
  • 不完全初始化:未赋值元素自动补 0
int arr[6] = {1}; // 等价 {1,0,0,0,0,0}

❌ 错误写法:初始化项数超过数组

int arr[3] = {1,2,3,4};

3. 数组类型

去掉数组名,剩余部分就是数组类型:

  • int arr[10]→ 类型:int [10]
  • char ch[5]→ 类型:char [5]

4. 一维数组使用(下标访问)

  • 数组下标从 0 开始
  • 最后一个元素下标 = 元素个数 - 1
  • 访问格式:数组名[下标]
#include <stdio.h> int main() { int arr[10] = {1,2,3,4,5,6,7,8,9,10}; printf("%d\n", arr[3]); // 输出4 printf("%d\n", arr[7]); // 输出8 return 0; }

5. 一维数组遍历

#include <stdio.h> int main() { int arr[10] = {1,2,3,4,5,6,7,8,9,10}; int i = 0; for(i = 0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }

6. 一维数组内存存储

  • 一维数组在内存中连续存放
  • 相邻元素地址差 = 元素类型所占字节数(int 相差 4 字节)

7. sizeof 计算数组元素个数(必背公式)

int sz = sizeof(arr) / sizeof(arr[0]);
  • sizeof(arr):数组总字节数
  • sizeof(arr[0]):单个元素字节数
  • 结果:数组元素个数

📊 三、二维数组(进阶必备)

1. 二维数组本质

以一维数组作为元素的数组,可以理解为 “表格”。

2. 二维数组创建

数据类型 数组名[行数][列数];

示例:

int arr[3][5]; // 3行5列的二维数组

3. 二维数组初始化

  • 不完全初始化
int arr[3][5] = {1, 2};
  • 完全初始化
int arr[3][5] = {1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
  • 按行初始化(更清晰)
int arr[3][5] = {{1,2},{3,4},{5,6}};
  • 省略行数(不能省略列数

4. 二维数组使用

行、列下标均从 0 开始,访问格式:数组名[行][列]

printf("%d", arr[2][4]); // 访问第3行第5列元素

5. 二维数组遍历(双层循环)

#include <stdio.h> int main() { int arr[3][5] = {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7}; int i, j; // 遍历输出 for(i = 0; i < 3; i++) { for(j = 0; j < 5; j++) { printf("%d ", arr[i][j]); } printf("\n"); } return 0; }

6. 二维数组内存存储

  • 二维数组在内存中也是连续存放
  • 行内连续、跨行也连续,整体是一段连续内存空间

⚙️ 四、C99 变长数组(VLA)

1. 作用

允许使用变量指定数组大小,运行时确定长度,更灵活。

int n; scanf("%d", &n); int arr[n]; // 变长数组

2. 重要特点

  • 数组大小运行时确定,不是 “可以变大”
  • 不能初始化
  • VS 不支持,GCC/Clang 支持

🧪 五、数组经典实战练习(代码可直接运行)

练习 1:字符从两端向中间汇聚

#include <stdio.h> #include <windows.h> #include <string.h> int main() { char arr1[] = "welcome to bit..."; char arr2[] = "#################"; int left = 0; int right = strlen(arr1) - 1; while(left <= right) { Sleep(500); arr2[left] = arr1[left]; arr2[right] = arr1[right]; left++; right--; printf("%s\n", arr2); } return 0; }

练习 2:二分查找(折半查找)

#include <stdio.h> int main() { int arr[] = {1,2,3,4,5,6,7,8,9,10}; int left = 0; int right = sizeof(arr)/sizeof(arr[0]) - 1; int key = 7; // 要查找的数字 int mid, find = 0; while(left <= right) { // 防止溢出写法 mid = left + (right - left) / 2; if(arr[mid] > key) right = mid - 1; else if(arr[mid] < key) left = mid + 1; else { find = 1; break; } } if(find) printf("找到了,下标是:%d\n", mid); else printf("找不到\n"); return 0; }

⚠️ 六、数组高频易错点总结

  • 数组下标从 0 开始,严禁越界访问
  • 初始化项数不能大于数组定义大小
  • 二维数组可省略行,不能省略列
  • 统一用sizeof(arr)/sizeof(arr[0])计算元素个数
  • 二分查找必须是有序数组
  • 变长数组不能初始化,VS 环境不支持

✅ 结语

数组是 C 语言的基础中的基础,掌握好数组的创建、访问、内存存储和常见用法,对后续学习指针、函数、数据结构都至关重要。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,后续会持续更新 C 语言干货~

http://www.jsqmd.com/news/776220/

相关文章:

  • Photoshop创意革命:SD-PPP插件如何用AI打破设计边界
  • agent-skills技能分类指南:从需求定义到代码部署的全流程覆盖
  • 体验 Taotoken 官方价折扣与稳定直连带来的高性价比模型调用
  • 3步告别重复工作:Pulover‘s Macro Creator让Windows自动化触手可及
  • 避坑指南:用51单片机驱动HC-SR04超声波模块,这5个细节没处理好,测距肯定不准!
  • 本地语音编程助手Dictator:用Whisper+WebGPU实现隐私优先的AI开发
  • @pytest.mark.xfail 的用法
  • 如何在长三角选海参:品质、正宗、口碑俱佳的连锁品牌推荐 - 资讯焦点
  • 告别手动降重!学霸私藏的查重神器太香了
  • 从STM32到GD32F470:手把手教你移植ICM20602的SPI驱动(附完整代码与避坑指南)
  • 技术面试监控系统:日志收集与性能分析终极指南
  • 抖音下载器终极指南:3步轻松下载无水印视频与直播回放
  • Thorium浏览器:超越Chrome的开源性能怪兽,为何成为技术爱好者的新宠?
  • 温州西装定制实测推荐|5家热门门店排名,品质/性价比/版型全测评 - 资讯焦点
  • 煤矿用电力电缆哪家好?2026最新安全采购选型指南 - 深度智识库
  • 告别RLHF的复杂流程:用DPO直接微调你的大语言模型(附PyTorch代码)
  • .NET集成ChatGPT:rodion-m开源库生产级应用指南
  • LinkSwift:九大网盘直链解析工具,告别繁琐下载流程
  • 利用 Taotoken 统一 API 简化多智能体系统的模型管理
  • 手把手教你用CAPL在CANoe中模拟ECU节点:从变量定义到报文发送的完整流程
  • 3篇3章4节:Obsidian 的插件库和非 Markdown 编辑方法
  • ComfyUI-Florence2完整指南:5分钟解锁微软视觉语言模型的终极力量
  • 正本清源!关于所谓“2026年5月劳力士全国官方售后维修服务中心最新公告”大量地址与我方高度重合、误导消费者的严正辟谣与全面声明 - 亨得利腕表维修中心
  • 2026年山西精准获客与GEO优化完全指南:手机号定向推广如何助力中小企业低成本获客 - 年度推荐企业名录
  • 脑机融合背景下的道德责任归因模型:基于拓扑增强鸿沟与分形时间特权的三阶分析框架(世毫九实验室原创研究)
  • 终极指南:Switch大气层1.7.1稳定版完整安装与优化教程
  • Catapult部署与运维指南:生产环境性能监控系统搭建
  • MilkyTracker与Amiga ProTracker兼容性:复古音效的现代重现
  • 2026年香港身份中介怎么选?香港身份高端定制化服务深度测评 - 速递信息
  • 2026年山西精准获客门店引流完全指南:手机号定向推广、GEO优化与短视频代运营深度横评 - 年度推荐企业名录