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

Linux学习笔记(八):C语言一维字符数组

一、一维字符型数组

1. 字符数组的概念

在C语言中:

字符数组就是用于存储字符的一维数组。

例如:

char name[10];

表示定义一个字符数组,可以存储10个字符。

数组中的每个元素都是:

char

类型。

例如:

char str[5];

内存结构:

str ↓ +---+---+---+---+---+ | | | | | | +---+---+---+---+---+ 0 1 2 3 4

每个位置可以保存一个字符。


二、字符数组初始化

字符数组初始化有多种方式。


1. 使用字符逐个初始化

例如:

char str[5]={'h','e','l','l','o'};

数组内容:

h e l l o

对应:

str[0]='h' str[1]='e' str[2]='l' str[3]='l' str[4]='o'

2. 使用字符串初始化

C语言中可以直接使用字符串初始化字符数组。

例如:

char str[]="hello";

编译器会自动计算数组长度。

实际上:

char str[]="hello";

等价于:

char str[6]={'h','e','l','l','o','\0'};

注意:

最后多出了一个:

'\0'

三、字符串结束标志 '\0'

1. 什么是字符串?

在C语言中:

字符串是以'\0'结尾的字符数组。

例如:

char str[]="hello";

内存:

h e l l o \0

其中:

'\0'

表示字符串结束。


2. 为什么需要'\0'?

例如:

char str[5]={'h','e','l','l','o'};

虽然保存了hello。

但是C语言不知道字符串在哪里结束。

而:

char str[6]={'h','e','l','l','o','\0'};

表示:

hello结束

因此:

'\0'是C语言判断字符串结束的重要标志。


四、字符数组的输入输出

1. 使用循环输入字符

例如:

输入5个字符:

#include<stdio.h> int main() { char str[5]; int i; for(i=0;i<5;i++) { scanf("%c",&str[i]); } return 0; }

2. 使用%s输入字符串

C语言中:

scanf("%s",str);

可以直接输入字符串。

例如:

#include<stdio.h> int main() { char name[20]; scanf("%s",name); printf("%s",name); return 0; }

输入:

Tom

输出:

Tom

注意:

使用scanf("%s")输入字符串时:

  • 遇到空格会结束;
  • 不能输入带空格的字符串。

例如:

输入:

hello world

只能读取:

hello

五、字符数组常用函数

C语言提供了字符串处理函数,需要包含:

#include<string.h>

1. strlen() 求字符串长度

功能:

计算字符串有效字符数量。

例如:

#include<stdio.h> #include<string.h> int main() { char str[]="hello"; printf("%d",strlen(str)); return 0; }

输出:

5

注意:

strlen不会计算:

'\0'

2. strcpy() 字符串复制

格式:

strcpy(目标字符串,源字符串);

例如:

char a[20]; char b[]="hello"; strcpy(a,b);

执行后:

a="hello"

3. strcat() 字符串连接

功能:

将两个字符串连接。

例如:

char a[20]="hello"; char b[]="world"; strcat(a,b);

结果:

helloworld

4. strcmp() 字符串比较

格式:

strcmp(str1,str2);

返回值:

  • 0:相等
  • 大于0:str1大
  • 小于0:str1小

例如:

strcmp("abc","abc")

结果:

0

六、二维整型数组

1. 二维数组概念

前面学习的一维数组:

类似:

一排数据

例如:

1 2 3 4

二维数组:

类似:

表格

例如:

1 2 3 4 5 6 7 8 9

二维数组可以表示:

  • 矩阵;
  • 表格;
  • 游戏地图;
  • 图像数据。

七、二维数组定义

格式:

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

例如:

int a[3][4];

表示:

3行4列的二维数组。

结构:

列 0 1 2 3 0 □ □ □ □ 1 □ □ □ □ 2 □ □ □ □

共有:

3×4=12

个元素。


八、二维数组元素访问

访问格式:

数组名[行][列]

例如:

a[1][2]

表示:

第2行第3列元素。

注意:

数组下标从0开始。


例如:

int a[2][3]; a[0][0]=10; a[1][2]=20;

九、二维数组初始化

1. 完全初始化

例如:

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

表示:

1 2 3 4 5 6

2. 省略行数

可以省略第一维:

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

编译器自动计算行数。


3. 部分初始化

例如:

int a[2][3]={{1,2}};

结果:

1 2 0 0 0 0

没有赋值的位置自动为0。


十、二维数组遍历

二维数组通常使用双重循环。

例如:

输出二维数组:

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

输出:

1 2 3 4 5 6

十一、二维数组应用——矩阵

二维数组非常适合表示矩阵。

例如:

A= 1 2 3 4

可以表示:

int A[2][2];

在图像处理、机器人、人工智能领域:

二维数组也经常用于表示:

  • 图像像素;
  • 地图信息;
  • 状态空间。
http://www.jsqmd.com/news/1285158/

相关文章:

  • 物联网设备安全芯片SE050的应用与防护实践
  • 计算机硬件核心原理与实战指南:从CPU、内存到显卡的协同工作与故障排查
  • 基于龙芯1C开源主板的嵌入式Linux开发与实战应用
  • Elasticsearch核心操作实战:从索引管理到搜索聚合的避坑指南
  • STM32 HAL库硬件SPI驱动0.96寸OLED屏(SSD1306)全流程移植指南
  • 非流行边修复
  • STC89C52定时器与中断实战:从原理到PWM呼吸灯应用
  • 大模型开发框架对比:LangChain、LangFlow与LangGraph
  • 一维字符数组.二维整形数组
  • C++核心特性解析:命名空间、缺省参数与函数重载实战指南
  • Arduino HC-05蓝牙模块完整配置与通信避坑指南
  • 用Arduino打造复古BASIC计算机:从模块集成到解释器实现
  • 软件设计师备考:从知识体系构建到实战应用的全攻略
  • Kali Linux本地靶场搭建指南:从零部署vulntarget-a渗透测试环境
  • Bluno Beetle开发板:可穿戴与物联网原型设计的低功耗蓝牙解决方案
  • 2026年7月金刚橡胶屋顶料/济南金刚橡胶屋顶行业优选推荐_济南鸿途保温材料有限公司 - 行业平台推荐
  • RePKG:解锁Wallpaper Engine资源宝库的专业级逆向工程工具
  • [问题排查]MATLAB imread函数读取文件速度过慢问题
  • MATLAB地图绘制全攻略:从数据导入到专题制图
  • C/C++编程中size_t的正确使用:避免内存越界与提升代码健壮性
  • 程序员必备Prompt工程实战指南
  • AI辅助论文写作工具实测与学术规范平衡指南
  • Unity开发中ArgumentNullException: _unity_self异常的深度解析与解决方案
  • 嵌入式Linux Qt交叉编译实战:从环境搭建到开发板部署全流程
  • Hard Macro的Float Pin设错了,skew balance全白干
  • 迪文串口屏变量显示与MCU通信协议详解及实战应用
  • 雨天显影艺术:从亲水涂层到遇水变色材料的创作指南
  • 基于STM32的智能风扇系统:从环境感知到PID温控的嵌入式实战
  • 深入理解补码:C/C++底层编程与面试必备的核心基础
  • 2026实盘交易数据底座:海量时序数据存储与AI推理延迟优化实践