C语言 数组

前言

        在实际运用中,最常见的数组包括一些一维数组和二维数组, 它们是同一种元素的集合,主要用于处理同类型的批量数据。

一、一维数组

1. 一维数组的定义        

        一维数组的定义方式:类型说明符 数组名[常量表达式] ;如果要使用数组,必须先告诉计算机:这些元素的数据类型,有多少元素,即数组的定义。例如下面:

#define N 10
int main() {
	//例1
	int a[10];
	//例2
	float b[N];
	//例3
	int n = 10;
	char c[n];
	return 0;
}

        数组定义时下标引用符内不可为变量,例1定义了具有十个元素的整型数组,例2定义中用了宏常量本质,而例3就出问题了n为变量,编译器就会报错。注意:常量表达式必须为正整数。

2. 一维数组的初始化

        在定义数组的时候,就给数组元素赋初值,称为数组的初始化。

//初始化一个int型的数组
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
//未赋值的元素默认为0
int d[10] = { 1,2,3,4,5 };
//定义时直接赋值可以省略数组长度,数组长度为数组元素个数
float b[] = { 1.4,2.5,3.5,4.4,5.8,6.6,7.1,8.9,9.1,10.0 }; 
//以下都为字符数组的定义方式
//此方式初始化后无'\0'
char f[3] = { '1','2','3' };
//字符数组初始化时因为为字符串形式末尾自动添加'\0'
char c[3] = "12";

        

        由此可以看到为赋值的元素全被赋0。 

3. 一维数组的引用

        引用方式: 数组名[元素下标];

int main() {
	int b[10] = { 1,2,5,5,4 };
	int i;
	for (i = 0; i < 10; i++)
		printf("%d ", b[i]);
	return 0;
} 

         注意:1. 此时元素下标可以为变量。

                    2. 下标元素从0开始到数组长度减1。

                    3. 不要下标越界。

4.一维数组在内存中的存储

        我们可以输出整个数组元素的地址来观察一下。

       挨地址输出之后 ,我们可以发现每个数组元素的地址相差4个字节,是一个整型所占的内存大小,所以得出结论:数组元素在内存中从低地址到高地址连续存放。

        根据这一特点我们可以使用sizeof来计算数组的长度: 

int a = sizeof(b) / sizeof(b[0]);
//数组的总字节数除以单个元素的字节数即为数组长度

 二、二维数组

        前面提到有的问题需要用到二维数组数组来解决,二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以形象化的理解二维数组的结构。

1. 二维数组的定义

        二维数组的定义方式: 类型说明符 数组名[数组行长度][数组列长度];

        例如: int a[3][4];  这条语句就定义了一个3行4列的二维数组。

        和一维数组一样二维数组在定义时,行长度和列长度都只能为常量表达式,不可以为变量。

        根据二维数组在内存中的存储来看,二维数组 各个元素与一维数组一致是连续存储,可以将二维数组看为特殊的一维数组,他的元素分别又是三个一维数组。二维数组在c语言内存中元素排列的顺序是按行存放的,在内存中先顺序排放第一行的元素接着第二行。

2. 二维数组的初始化 

        二维数组初始化时可以省略行标,不可以省略列标。

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int a[3][4]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int a[3][4] = { {1,2,3},{1} };
int a[][4] = { 1,2,3,4,5,6 };

         以上两种初始化方式,第一种为第一个花括号内为第一行元素,第二个花括号内为第二行元素,元素数不足列数的话,后面元素为0。第二种则为自动化分,不足后面元素为0。

3.二维数组的引用

        引用方式: 数组名[行元素下标][列元素下标]; 下标范围与一维数组判别一致。

        感谢大家的观看!

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值