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’)

posted @   码上领航者  阅读(49)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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的设计差异
点击右上角即可分享
微信分享提示