C 语言(10)
10.数组
10.1 一维数组
10.1.1 一维数组的定义
一维数组的定义方式为:类型说明符 数组名 [常量表达式];
对于数组类型说明应注意以下几点:
1) 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
2) 不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。
3) 允许在同一个类型说明中,说明多个数组和多个变量。例如:int a,b, k1[10], k2[20];
10.1.2 一维数组元素的引用
数组元素的一般形式为:数组名[下标]。其中下标只能为整型常量或整型表达式。
10.1.3 一维数组的初始化
初始化赋值的一般形式为:类型说明符 数组名[常量表达式]={值,值……值};
C 语言对数组的初始化赋值还有以下几点规定:
1) 可以只给部分元素赋初值。
2) 只能给元素逐个赋值,不能给数组整体赋值。
3) 如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。
10.2 二维数组
10.1.1 二维数组的定义
二维数组定义的一般形式是:类型说明符 数组名[常量表达式1][常量表达式2]
在 C 语言中,二维数组是按行排列的。
10.1.2 二维数组元素的引用
二维数组的元素也称为双下标变量,其表示的形式为:数组名[下标][下标]
10.1.3 二维数组的初始化
二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。
例如对数组a[5][3]:
1) 按行分段赋值可写为 :
int[5][3]={ {80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85} };
2) 按行连续赋值可写为 :
int a[5][3]={ 80,75,92,61,65,71,59,63,70,85,87,90,76,77,85};
这两种赋初值的结果是完全相同的。
对于二维数组初始化赋值还有以下说明:
1) 可以只对部分元素赋初值,未赋初值的元素自动取0值。
2) 如对全部元素赋初值,则第一维的长度可以不给出。
例如:int a[3][3]={1,2,3,4,5,6,7,8,9};
可以写为:int a[][3]={1,2,3,4,5,6,7,8,9};
3) 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。 C 语言允许这种分解。
10.3 字符数组
10.3.1 字符数组的定义
形式与前面介绍的数值数组相同。
10.3.2 字符数组的初始化
字符数组也允许在定义时作初始化赋值。
例如:char c[10]={‘c’,‘ ’,‘p’,‘r’,‘o’,‘g’,‘r’, ‘a’,’m’};
C 语言允许用字符串的方式对数组作初始化赋值。
可写为:char c[]={“C program”};
或去掉 {} 写为:char c[]=“C program”;
用字符串方式赋值比用字符逐个赋值要多占一个字节, 用于存放字符串结束标志 '\0'。
对一个字符数组,如果不作初始化赋值,则必须说明数组长度。
10.3.3 字符数组的输入输出
在采用字符串方式后,字符数组的输入输出将变得简单方便。
除了上述用字符串赋初值的办法外,还可用 printf 函数和 scanf 函数一次性输出输入一个字符数组中的字符串,而不必使用循环语句逐个地输入输出每个字符。
例如:char c[]="BASIC\ndBASE"; printf("%s\n",c);
char st[15]; scanf("%s",st);
* 当用 scanf 函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。
* gets 函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。
10.3.4 字符串处理函数
1) 字符串输出函数 puts 格式: puts (字符数组名)
2) 字符串输入函数 gets 格式: gets (字符数组名)
3) 字符串连接函数 strcat 格式: strcat (字符数组名 1,字符数组名 2)
4) 字符串拷贝函数 strcpy 格式: strcpy (字符数组名 1,字符数组名 2)
5) 字符串比较函数 strcmp 格式: strcmp(字符数组名 1,字符数组名 2)
功能:按照 ASCII 码顺序比较两个数组中的字符串
测字符串长度函数 strlen 格式: strlen(字符数组名) (不含 ‘\0’)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异