目录
前言:
我在写本篇文章之前,阅读了一些书籍结合自己的见解,致力于帮助读者更好的理解和掌握一维,二维数组以及和指针的结合
加油(* ̄︶ ̄)
一、一维数组
当遇到连续相同类型的数据并且作用相同时,你会不会一个一个定义,例如要表示一年中每个月的天数,你会不会这样定义:
int a1 = 31;
int a2 = 28;
int a3 = 31;
……
那这样就太麻烦了。对于这种情况,c提供了一维数组来解决,现在正式进入一维数组
1.数组的介绍
数组就是由数据类型相同的一系列元素组成。也就是里面可以存放类型相同并且连续的数据,就不用一个一个去定义了,省时,省力,还简洁。
int a[10];
double b[20];
其中的数组a,存储了10个连续的int型数据
其中的数组b,存储了20个连续的double型数据
我们可以通过下标来获取对应元素的值。
注意:下标是从0开始,上方的数组a一共有10个元素,但是下标从0开始,那么下标引用的范围为:a[0] ~ a[9]
2.初始化一维数组
拿上面的例子,初始化每个月的天数的数组
int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
是不是很简洁,这里相当于定义了一个days数组,里面一共有12个int型的连续数据,边并且都初始化值了
所以初始化数组的格式为:
-
标准初始化
类型 数组名[ 3 ] = { 值, 值2, 值3 };
这里要注意的点:
a.确定了初始化的值,就一定要小于等于确定数组的长度例如上方的例子,在初始化当中,只能小于等于3
b.当初始化值小于数组长度时,空着的数据为0
例如上方的 2号元素为0
c.数据间用逗号分隔
-
不确定长度
即不在“中括号”中指定长度,那么它的长度就是赋初值后的元素个数,例如:
int a[ ] = { 1, 2, 3, 4, 5 };
这里数组a中有5个元素值,那么这个数组的长度就为5,即中括号里相当于写了个5
3.元素的赋值
第一种方法就是上面的赋初值
还可以通过数组下标来赋值,例如:
int a[5];
int b[5];
//通过for循环来完成a数组的赋值
for( int i = 0; i < 5; i++ )
{
a[i] = i;
}
//直接将数组赋值给数组不允许,是错的!!!
b = a; XXX
//数组元素可以给数组元素赋值
b[0] = a[0];
注意:
a.数组不能越界,上面的例子中,如果给a[5]赋值则会出错
b.不能直接将数组直接赋值给另一个数组但是元素可以
例如上方 b = a; 是错的
b[0] = a[0];是对的
二、二维数组
二维数组实际上是由多个一维数组组成的,看个栗子🌰
int a[2][3];
相当于创建了一个2行3列的二维数组
这里要知道,先行后列
初始化二维数组与运用
写法一 :两个大括号
int a[2][3] ={ { 1, 2, 3 }
{ 4, 5, 6 }
}
写法二:一个大括号
int a[2][3] ={ 1, 2, 3,
4, 5, 6 }
写法一和写法二区别就在里面的大括号
都表示:
定义了两行三列的数据,其中
第一行的数据为:1,2,3第二行的数据为:4,5,6
也可以这么形容:
这里定义了两个拥有三个数据的一维数组
看个图加深你的理解
这里有2个注意的点:
a.二维数组名,可以看做指向二维数组,那如何引用二维数组的值呢?
也是用下标,图中标明了下标位置
例如:a[0][1] 那么值就是2
a[1][2] 的值就是6b.二维数组想象成平面的,是为了更好的理解它,而它实际存储的是连续的
如图中的那个样子
三、数组与指针
首先记住一个概念:数组名就是数组首元素的地址
当知道了这个,就能够和指针关联起来了,指针是指向一个地址
那么数组名就是首元素的地址,直接将指针指向数组不就可以了,看样子感觉还挺简单的😊
1.指针与一维数组的结合
int a[3] = { 1, 2, 3 };
int *p = a;
这里相当于是指针p指向数组a
也可以看成:
int *p = &a[0] //首元素地址p[1] == a[1] 这是等价的
那如果你不想指向首元素地址,怎么办呢?
int *p = &a[i]; 注意i的取值范围:i >= 0 && i <3
即数组名加几就是几号元素
2.指针与二维数组的结合
指针与二维数组结合和一维结合是差不多的,就是多了几个要注意的点
还是拿上面那个二维数组为例,这里可以理解为,这个二维数组由两个一维数组组成
一个一维数组是a[0],另一个一维数组是a[1]。
那么a[0]和a[1]就是这两个一维数组的数组名
所以就可以知道:
- a[0]是数组名,那它的首元素呢?
那么就和一维数组的操作一样了,即a[0][0]
a[1]的首元素也同理是 a[1][0]
- 那a[0]的地址是什么?
和一维数组同理:&a[0][0]
a[1]也同理:&a[1][0]
四、总结
如果本文对您有帮助,别忘了点赞收藏关注哈,您的这一支持将是我不断前进的动力
关注我一波哈