C语言-数组(详细版)

数组

1.什么是数组,为什么需要数组

数组是由一组数据类型相同的元素组成的集合
当我们声明了数组之后,我们的编译器会根据
信息正确地创建数组

引用数组可以存储大量元素,便于定义很多个

变量,并给它一次性初始化(赋值),我们的一

维数组可以模拟直线(线性表),二维数组可以

模拟一个平面,而三维数组模拟是立体,而多维

数组可以模拟我们看不到的事物,

数组还有个局限性数组,数组下标是个固定值只

能人为去设定一个值

2.数组创建完成过程中需要注意什么?

数组的索引号永远比数组元素的位数少1,这是
因为数组索引号(下表)从0开始


数组的索引号一定要大于0,索引号里可以是常
量表达式,例如:
float a2[5*2 + 1]

数组名是是数组的首地址,因为只要我们知道首
地址,则我们就会知道这个数组里的所有元素

3.数组的分类

  • 一维数组

怎样定义一维数组

为n个变量连续分配空间

所有的变量数组类型必须相同

所有的变量所占字节大小必须相等

例如 :

int [5];定义5个为int的型变量的数组元素

有关一维数组的操作

初始化:(就是给每个元素赋值,因为不初始化刚分配的内存空间都是一些垃圾值)

格式:数组名[元素个数] = {元素集合}

例如 :int a[5] = {1,2,3,4,5};

       完全初始化

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

       不完全初始化,未被初始化的值全为0

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

       不初始化,所有元素都是垃圾值

                 Int a[5];

       清零

              Int a[5] = {0};

        错误写法:

               int [5]; //

               a [5] = {1,2,3,4,5}; //定义之后再使用就相当于使用a[5]这个元素(也没有这个元素,超出范围了)

         只有在定义数组的同时才可以整体赋值

         其他情况全部是错误,

         

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

               a[5] = 5;//错误,因为数组最大是a[4]

          数组下标是从0开始的

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

               Int b[5];

           如果要把a数组中的值全部赋给b数组

            错误写法:

                    b = a;//error

            正确写法:

                    for(i=0; i<5; i++)

                        b[5] = a[5];

如下代码为一维数组的初始化及输出

# include <stdio.h>
/*
        一维数组的初始化和输出
*/
int main(void)
{
	int a[5]; //定义一维数组未初始化,里面都是垃圾值
	int i;
	
	
	scanf("%d", &a[0]);
	printf("a[0] = %d\n", a[0]);

	scanf("%d", &a[1]);
	printf("a[1] = %d\n", a[1]);

	scanf("%d", &a[2]);
	printf("a[2] = %d\n", a[2]);

	scanf("%d", &a[3]);
	printf("a[3] = %d\n", a[3]);
	
	scanf("%d", &a[4]);
	printf("a[4] = %d\n", a[4]);
	
	printf("-------------------\n");
	
	for (i=0; i<5; i++)
		printf("%d\n", a[i]);
	
	
	return 0;
}

例子:

赋值

排序

求最大/最小值

倒置

  • 二维数组

int a[3][4];

总共是12个元素,可以当做一个3行4列的矩阵来处理

这12个元素的名字依次是

a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

a[2][0] a[2][1] a[2][2] a[2][3]

a[i][j]:表示第i+1行,第j+1列元素

int [m][n]:最大为下标a[m-1][n-1]

3*4的矩阵

初始化

       写法1 int [2][3] = {1,2,3,4,5,6}

       写法2 int [2][3] = {

                   {1,2,3},

                   {4,5,6},

              }

输出二维数组:两个for输出,

下面代码为二维数组的初始化和输出

# include <stdio.h>
/*
二维数组的初始化和输出
*/
int main(void)
{
	int i,j;
	int a[2][3] = {
		
		{1,2,3},
		{4,5,6},
		
	};//二维数组初始化	
	
	
	for(i=0; i<2; i++)//编译器先按行读取 从第0行开始
	{
		for(j=0; j<3; j++)//在按列读取 从第0列开始
			printf("%5.1d ", a[i][j]);
		printf("\n");
	}
	return 0;
}

例子

二维数组排序

最大值、最小值

矩阵操作

       

  • 多维数组

是否存在多为数组

不存在

因为内存是线性的

N维数组可以当做每个元素数n-1维的数组的一维数组(重点记忆)

      比如二维数组

       Int [3][4];

        该数组是含有3个一维数组的数组

        只不过每个一维数组元素都可以再分成4个小元素

        Int [3][4][5];

         该数组是含有3个一维数组的数组

只不过每个一维数组元素都是4行5列的二维数组

以上是我的总结;如有不足,感谢点评

2023年6月13日17:18:25

作者:wkx

目的:学习C语言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值